簡體   English   中英

screenmanager kivy定義回調函數以切換屏幕

[英]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()
  1. sm.current = "settings"替換ScreenManager().current = "SettingsScreen" sm.current = "settings"
  2. 將類名從mainwidget重命名為MainWidgetCapWords約定)

main.py

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()

產量

Img01-應用程序啟動 Img02-按下按鈕,“轉到下一個”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM