我正在尝试将方法绑定到微调器的文本值。最迟需要在显示 TestScreen 时进行绑定。如果我不使用 ScreenManager,这将有效(例如,如果 TestApp.build 返回 TestScreen 而不是 TestScreenManager)。当 TestApp.build 返回 TestScreenManager 时,当我在中引用 self.ids 时,出现以下错误TestScreen.__init__
AttributeError: 'super' object has no attribute '__getattr__'
Test.py
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.app import App
class TestScreen(Screen):
def __init__(self, *args, **kwargs):
super(TestScreen, self).__init__(*args, **kwargs)
self.ids.test_spinner.bind(text=self.on_spinner_select)
def on_spinner_select(self, instance, data, *largs):
print("In on_spinner_select")
def print_spinner_value(self):
print(self.ids.test_spinner.text)
class TestScreenManager(ScreenManager):
pass
class TestApp(App):
def build(self):
#return TestScreen()
return TestScreenManager()
if __name__ == "__main__":
TestApp().run()
Test.kv
<TestScreen>:
name: "World Screen"
BoxLayout:
orientation: 'vertical'
Label:
text: "Name"
font_size: 30
BoxLayout:
Label:
text: "Active Selection"
size_hint_x: .5
Spinner:
id: test_spinner
text: "Value1"
values: ["Value1", "Value2"]
Button:
text: "Print spinner value"
on_press: root.print_spinner_value()
<TestScreenManager>:
TestScreen:
我尝试在 on_enter 方法中绑定该方法,但出现相同的错误。但是,如果我注释掉 init 函数中的 self.ids 语句,self.ids 确实可以在 print_spinner_value 方法中工作。
目前,我可以通过每次按下微调器时绑定函数来找到解决方法。但这似乎不是解决问题的最佳方法
on_press: self.bind(text=root.on_spinner_select)
所以我的问题是:在使用 ScreenManager 时如何将方法绑定到加载时的微调器?