[英]Problems with Kivy ScreenManager (ScreenManager.current trouble)
[英]screenmanager kivy define callback function to switch screens
我想用kivy切換python文件中的屏幕。 我希望這是通過回調函數gonext 。 如何定義這個? 當我運行代碼時,它顯示mainwidgetApp,但該按鈕不起作用。 這是我嘗試的方法:將sm更改為global(可能不是一個好主意)。 將mainwidget的kivy文件更改為:on_press:root.manager.current ='settings'
這是我的代碼:
Builder.load_string("""
<MenuScreen>:
mainwidgetApp
<SettingsScreen>:
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'settings'
""")
class mainwidget(Widget):
def __init__(self, **kwargs):
btnnext = Button(text='go to next', pos=(200, 400))
btnnext.bind(on_press=self.gonext)
self.add_widget(btnnext)
# def savecard(self, btn_instance):
def gonext(self ,btn_inst):
ScreenManager().current = "SettingsScreen"
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class mainwidgetApp(App):
def build(self):
Window.clearcolor = (0,0,0.3,1)
return mainwidget()
if __name__ == '__main__':
mainwidgetApp().run()
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
sm.current = "settings"
替換ScreenManager().current = "SettingsScreen"
sm.current = "settings"
mainwidget
重命名為MainWidget
( CapWords約定) from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.lang import Builder
Builder.load_string("""
#:kivy 1.11.0
<MenuScreen>:
MainWidget:
<SettingsScreen>:
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'settings'
""")
class MainWidget(Widget):
def __init__(self, **kwargs):
super(MainWidget, self).__init__(**kwargs)
print("\nmainwidget:")
btnnext = Button(text='go to next', pos=(200, 400))
btnnext.bind(on_press=self.gonext)
self.add_widget(btnnext)
# def savecard(self, btn_instance):
def gonext(self ,btn_inst):
sm.current = "settings"
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
class ScreenManager(ScreenManager):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
Window.clearcolor = (0,0,0.3,1)
return sm
if __name__ == '__main__':
TestApp().run()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.