第二个kivy屏幕ScreenManager仅接受Screen Widget错误

问题描述 投票:0回答:1

我从 kivy 开始,尝试编写一些简单的小代码来跟随视频,但我已经遇到了他没有的错误。我有以下代码...

my_tours.kv

<MyTours>:
    Button:
        text:
            "Planned trips"
        on_release:
            app.change_screen("settings")

设置.kv

<Settings>:
    Button:
        text:
            "Settings"

main.kv

#:include kv/my_tours.kv
#:include kv/settings.kv

GridLayout:
    cols: 1
    ScreenManager:
        id: screen_manager
        MyTours:
            name: "my_tours"
            id: my_tours
        Settings:
            name: "settings"
            id: settings

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen


class MyTours(Screen):
    pass


class Settings(Screen):
    pass


gui = Builder.load_file("main.kv")


class MainApp(App):
    def build(self):
        return gui
    
    def change_screen(self, screen_name):
        # Get the screen manager from the kv file
        screen_manager = self.root.ids["screen_manager"]
        screen_manager.current = screen_name


MainApp().run()

如果我仅将 MyTours 屏幕包含在 main.kv 文件中,则一切正常。由于某些原因,“设置”屏幕无法单独使用或与 MyTours 一起使用。也许我忽略了一些东西,但我找不到两个屏幕的文件或代码之间的差异。错误是

kivy.uix.screenmanager.ScreenManagerException: ScreenManager accepts only Screen widget.
我在这里做错了什么?

python kivy
1个回答
0
投票

问题是

Settings
kivy.uix.settings
中定义的众所周知的类。这就是您的
kv
中使用的类。尝试将班级名称更改为
Settings
以外的名称。

© www.soinside.com 2019 - 2024. All rights reserved.