我試圖在屏幕之間切換,但我的屏幕管理器失敗,說它有一種類型的NoneType。 我懷疑我可能無法正確引用我的屏幕管理器? 這將是什麼正確的方法?Python Kivy屏幕管理器的'AttributeError'
我採取的方法是直接從文檔,所以我不確定我要去哪裏錯了。
錯誤:
on_release: root.manager.current = 'AboutUsWindow'
AttributeError: 'NoneType' object has no attribute 'current'
我.kv文件:
<MainWindow>:
name: "MainWindow"
BoxLayout:
orientation: "horizontal"
ActionBar:
pos_hint: {'top':1}
use_separator: True
background_color: 0, 1, 1, 1
ActionView:
use_separator: True
ActionPrevious:
with_previous: True
ActionOverflow:
ActionButton:
# text: "some text"
text: root.name
on_release: root.manager.current = 'AboutUsWindow'
ActionButton:
text: "sponsors"
on_release: root.manager.current = 'AboutUsWindow'
ActionButton:
text: "contact"
ActionButton:
text: "event"
<AboutUsWindow>:
name: "AboutUsWindow"
Label:
text: "asdasdasd"
Button:
size: (123,123)
我main.py文件:
# Here are imports which i did not include
class MainWindow(Screen, BoxLayout, CoverImage):
pass
class AboutUsWindow(Screen, BoxLayout, CoverImage):
pass
sm = ScreenManager()
sm.transition = FadeTransition()
sm.add_widget(MainWindow())
sm.add_widget(AboutUsWindow())
class PystokApp(App):
def build(self):
root = MainWindow(source='images/logo.jpg')
return root
# main = MainWindow()
# Window.size = main.size
# return MainWindow()
if __name__ == "__main__":
PystokApp().run()
您的多重繼承可能是災難的祕訣。一般而言,您應該只繼承一個窗口小部件類型,並將其他窗口的實例添加到窗口小部件。 – inclement
@inclement我不認爲這是必然的,如果兩個小部件做不同的事情,那麼不應該存在從兩者繼承的問題。一個問題可能是Screen本身是RelativeLayout的子類,另外從BoxLayout繼承可能會破壞事情。 – syntonym
這不一定是真實的,因此只是一個災難的祕訣。由於窗口小部件的組成部分並不打算以這種方式工作,因此我們儘量避免出現問題,這就是爲什麼我建議在某些情況下避免它的原因。 – inclement