我想更改多个位置的切换按钮的属性。运行代码时,我得到AttributeError: 'super' object has no attribute '__getattr__'
。我必须在python文件中创建按钮才能正常工作吗?
from kivy.app import App
from kivy.lang import Builder
KV = Builder.load_string("""
ScreenManager:
Screen:
name: 'screen'
GridLayout:
cols:1
rows:3
TButton:
TButton:
Button:
text:
'Reset button'
on_release:
app.root.get_screen('screen').ids.toggle_buttons.state = 'normal'
<TButton@ToggleButton>:
id: toggle_buttons
allow_no_selection: True
text: 'Toggle Button'
""")
class MyApp(App):
def build(self):
return KV
if __name__ == '__main__':
MyApp().run()
当我按下“重置按钮”时,TButton应该将其state
重置为'normal'
。
答案 0 :(得分:1)
首先,您必须了解id必须具有本地范围,并且不应在其外部使用它。因此,toggle_buttons ID仅应在TButton的实现中使用。
根据您的逻辑,假设您只想通过该ID重置一个按钮,如果它们具有相同的ID,如何识别该按钮?我们认为这是不可能的。
解决方案是实现一个属性,该属性存储按钮的ID并通过设置该属性进行迭代。
ScreenManager:
buttons: [btn1, btn2] # <---
Screen:
name: 'screen'
GridLayout:
cols:1
rows:3
TButton:
id: btn1
TButton:
id: btn2
Button:
text:
'Reset button'
on_release: for btn in root.buttons: btn.state = 'normal'
<TButton@ToggleButton>:
id: toggle_buttons
allow_no_selection: True
text: 'Toggle Button'