我正在尝试在屏幕之间切换,但我的屏幕管理器失败,说它有一种类型的NoneType。 我怀疑我可能无法正确引用我的屏幕管理器? 对此有什么正确的解决方法?
我采取的方法直接来自文档,所以我不确定我哪里出错了。
错误:
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()
答案 0 :(得分:1)
您不使用ScreenManager。您创建了一个ScreenManager sm
并为其添加了屏幕,但在此之后您不会使用它,而是创建一个新的MainScreen(未与您的经理相关联)。您的根Widget应该是您的屏幕管理器,这意味着您的build()
函数应该返回ScreenManager。在文档中,这是return(sm)
。
您还需要在创建屏幕时为其命名。您可以Screen(name="myscreen")
执行此操作,否则您的经理将不知道这些名称与哪些屏幕相对应。
答案 1 :(得分:0)
您的应用可能没有显示屏幕,因为即使您将它们添加到屏幕管理器,您的PystokApp()类也不会返回屏幕管理器。
不是返回root,而是尝试返回sm。