使用Python Kivy制作多个屏幕有困难吗

2024-09-27 21:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想让代码在Python Kivy应用程序中有两个屏幕的地方工作,可以来回切换,而不需要使用.kv文件。

在这个页面上:https://kivy.org/docs/api-kivy.uix.screenmanager.html,从顶部开始的第二个代码块就是我想要完成的,除了我想不使用'Builder.load\u字符串(“”“'节,而只是正常实例化按钮。你知道吗

以下是我的尝试,但我无法让它工作:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

class MenuScreen(Screen):
    def build(self):

        def switchScreen():
            root.manager.current = 'settings'

        f = FloatLayout()

        button1 = Button(text = "My settings button")
        button2 = Button(text = "Back to menu", on_press = switchScreen)

        f.add_widget(button1)
        f.add_widget(button2)

class SettingsScreen(Screen):
    def build(self):

        def switchScreen():
            root.manager.current = 'menu'

        f = FloatLayout()

        button1 = Button(text = "My settings button")
        button2 = Button(text = "Back to menu", on_press = switchScreen)

        f.add_widget(button1)
        f.add_widget(button2)

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))

class MainApp(App):
    def build(self):
        return sm

if __name__ == '__main__':
    MainApp().run()

运行此代码只会创建一个不产生错误的空白页。你知道吗

有没有一种方法可以指定它来绘制一个特定的屏幕,从我丢失的屏幕开始?我不确定我的问题在哪里。你知道吗


Tags: textfromimportaddsettingsdefbuttonwidget
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:27

你做错了什么:

  • 如果您想从Python代码创建小部件内容,应该将其放在小部件__init__方法中,而不是build
  • 您正在创建一个布局,然后丢弃它。您需要使用self.add_widget(f)来在创建之后实际使用它
  • 您正在绑定到switchScreen方法,因此它需要接受调用者小部件作为参数。或者你可以简单地使用*args而不用担心它。你知道吗
  • 你不再在kv了,所以没有根。改用self。你知道吗

把这些放在一起:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

class MenuScreen(Screen):
    def __init__(self, **kwargs):
        super(MenuScreen, self).__init__(**kwargs)

        def switchScreen(*args):
            self.manager.current = 'settings'

        f = FloatLayout()

        button1 = Button(text = "My settings button")
        button2 = Button(text = "Back to menu", on_press = switchScreen)

        f.add_widget(button1)
        f.add_widget(button2)

        self.add_widget(f)

class SettingsScreen(Screen):
    def __init__(self, **kwargs):
        super(SettingsScreen, self).__init__(**kwargs)

        def switchScreen(*args):
            self.manager.current = 'menu'

        f = FloatLayout()

        button1 = Button(text = "My settings button")
        button2 = Button(text = "Back to menu", on_press = switchScreen)

        f.add_widget(button1)
        f.add_widget(button2)
        self.add_widget(f)

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))

class MainApp(App):
    def build(self):
        return sm

if __name__ == '__main__':
    MainApp().run()

相关问题 更多 >

    热门问题