add_widget 和 remove_widget 用于 kivy 中的 class
add_widget and remove_widget for a class in kivy
我是 Kivy 的新手,很抱歉在 post..
中问了 2 个问题
首先,为什么remove_widget()
不起作用?它说 AttributeError: 'MyCard' object has no attribute 'remove_card'
但我试图将它们放在其他 class 中,但它仍然不起作用。
其次,为什么我的小部件仍然具有“焦点行为”并且我的按钮仍然可以点击,即使我放了一张颜色几乎没有透明的卡片
这是我的 main.py 文件
class MyCard(Screen):
pass
class HomeScreen(Screen):
def add_card(self):
self.add_widget(MyCard())
def remove_card(self):
self.remove_widget(MyCard(name='cardd'))
class AVCard(Screen):
pass
class ScreenApp(MDApp):
def build(self):
def build(self):
sm = ScreenManager(transition=FadeTransition(duration=0.2))
sm.add_widget(HomeScreen(name='home'))
sm.add_widget(AVCard(name='av'))
return sm
这是我的 home.kv 文件(AVCard class 有自己的 .kv 文件)
<HomeScreen>:
name: 'home'
MDIconButton:
on_release: root.add_card()
...
<MyCard>:
name: 'cardd'
MDCard: #-> I put this card is to not allow user click on widgets behind it but it does not work
md_bg_color: 0, 0, 0, .3
...
MDCard: #-> Thís card is like a window which includes small widgets in it
...
Screen:
MDIconButton: #-> The close button
icon: "close-circle"
...
on_release:
root.remove_card()
非常感谢。
在您的 kv
中,root.remove_card()
试图引用 root
的 remove_card()
方法。在本例中 root
指的是它出现的规则的根,即 MyCard
。这就是您看到错误消息的原因,remove_card()
不在 MyCard
对象中。解决方法是使用对包含 remove_card()
方法的正确对象的引用,如下所示:
<MyCard>:
MDCard: #-> I put this card is to not allow user click on widgets behind it but it does not work
md_bg_color: 0, 0, 0, .3
MDCard: #-> Thís card is like a window which includes small widgets in it
Screen:
MDIconButton: #-> The close button
icon: "close-circle"
on_release:
app.root.get_screen('home').remove_card(root)
注意 app.root.get_screen('home').remove_card(root)
的使用,它获取对 HomeScreen
对象的引用(假设使用的 name
是 home
),并调用其 remove_card()
方法以 root
(MyCard
实例)作为参数。
那么,在HomeScreen
class中,remove_card()
方法可以是:
def remove_card(self, card):
self.remove_widget(card)
我是 Kivy 的新手,很抱歉在 post..
中问了 2 个问题首先,为什么remove_widget()
不起作用?它说 AttributeError: 'MyCard' object has no attribute 'remove_card'
但我试图将它们放在其他 class 中,但它仍然不起作用。
其次,为什么我的小部件仍然具有“焦点行为”并且我的按钮仍然可以点击,即使我放了一张颜色几乎没有透明的卡片
这是我的 main.py 文件
class MyCard(Screen):
pass
class HomeScreen(Screen):
def add_card(self):
self.add_widget(MyCard())
def remove_card(self):
self.remove_widget(MyCard(name='cardd'))
class AVCard(Screen):
pass
class ScreenApp(MDApp):
def build(self):
def build(self):
sm = ScreenManager(transition=FadeTransition(duration=0.2))
sm.add_widget(HomeScreen(name='home'))
sm.add_widget(AVCard(name='av'))
return sm
这是我的 home.kv 文件(AVCard class 有自己的 .kv 文件)
<HomeScreen>:
name: 'home'
MDIconButton:
on_release: root.add_card()
...
<MyCard>:
name: 'cardd'
MDCard: #-> I put this card is to not allow user click on widgets behind it but it does not work
md_bg_color: 0, 0, 0, .3
...
MDCard: #-> Thís card is like a window which includes small widgets in it
...
Screen:
MDIconButton: #-> The close button
icon: "close-circle"
...
on_release:
root.remove_card()
非常感谢。
在您的 kv
中,root.remove_card()
试图引用 root
的 remove_card()
方法。在本例中 root
指的是它出现的规则的根,即 MyCard
。这就是您看到错误消息的原因,remove_card()
不在 MyCard
对象中。解决方法是使用对包含 remove_card()
方法的正确对象的引用,如下所示:
<MyCard>:
MDCard: #-> I put this card is to not allow user click on widgets behind it but it does not work
md_bg_color: 0, 0, 0, .3
MDCard: #-> Thís card is like a window which includes small widgets in it
Screen:
MDIconButton: #-> The close button
icon: "close-circle"
on_release:
app.root.get_screen('home').remove_card(root)
注意 app.root.get_screen('home').remove_card(root)
的使用,它获取对 HomeScreen
对象的引用(假设使用的 name
是 home
),并调用其 remove_card()
方法以 root
(MyCard
实例)作为参数。
那么,在HomeScreen
class中,remove_card()
方法可以是:
def remove_card(self, card):
self.remove_widget(card)