访问Python/Kivy动态屏幕类

2024-04-19 19:56:17 发布

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

所以我一直在开发一个使用多个屏幕的应用程序,其中一个是带有主题选择器的设置屏幕。代码如下所示:

Python:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class MainScreen(Screen):
    pass

class SettingsScreen(Screen):
     
    def changeTheme(self, state):
        if state:
            # set the bgs of screens to black
        else:
            # set the bgs of screens to white

class Test(App):
    
    def build(self):
        sm = ScreenManager(transition: FadeTransition())
        sm.add_widget(MainScreen())
        sm.add_widget(SettingsScreen())
        return sm

Test().run()

基维:

<MainScreen>:
    id: Main
    name: 'Main'
    BoxLayout:
        orientation: vertical
        Label:
            text: 'Settings below!'
        Button:
            id: 
            text: 'Settings'
            on_release: app.root.current = 'Settings'

<SettingsScreen>:
    id: Settings
    name: 'Settings'
    BoxLayout:
        Label:
            text: 'Dark mode?'
        CheckBox:
            id: darkTheme
            on_active: root.changeTheme(self.state)   

我现在面临的问题是,我不知道如何访问<MainScreen><SettingsScreen>类来更改背景颜色。任何帮助都将不胜感激


Tags: textfromimportselfidappsettings屏幕
1条回答
网友
1楼 · 发布于 2024-04-19 19:56:17

如果必须使用id访问Screens,则必须将Screens指定为kvScreenManager的子项,如下所示:

ScreenManager:
    MainScreen:
        id: Main
    SettingsScreen:
        id: Settings
    
<MainScreen>:
    name: 'Main'
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Settings below!'
        Button:
            id: butt
            text: 'Settings'
            on_release: app.root.current = 'Settings'

<SettingsScreen>:
    name: 'Settings'
    BoxLayout:
        Label:
            text: 'Dark mode?'
        CheckBox:
            id: darkTheme
            on_active: root.changeTheme(self.state)   

如果kv文件名为test.kv,则可以完全消除build()方法。然后,您可以使用root(即ScreenManager)的Appids访问Screens

相关问题 更多 >