带有菜单栏的 Kivy

DrP*_*per 1 python kivy

我想创建一个带有始终相同的菜单栏的 Kivy-App。

我的代码:

演示.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout

class Display(BoxLayout):
    pass

class Screen_One(Screen):
    pass

class Screen_Two(Screen):
    pass

class DemoApp(App):
    def build(self):
        return Display()

if __name__ == '__main__':
    DemoApp().run()
Run Code Online (Sandbox Code Playgroud)

演示.kv :

<Display>:
    BoxLayout:
        orientation: "vertical"

        BoxLayout:
            size_hint: 1, None
            height: '48dp'
            Button:
                text: 'One'
                on_release: sm.current = 'Screen_One'
            Button:
                text: 'Two'
                on_release: sm.current = 'Screen_Two'

        ScreenManager:
            id: sm
            Screen_One:
            Screen_Two:

<Screen_One>:
    Button:
        text: 'One'

<Screen_Two>:
    Button:
        text: 'Two'
Run Code Online (Sandbox Code Playgroud)

但它不起作用,如果我点击“一”,我收到:

kivy.uix.screenmanager.ScreenManagerException: 没有名称为“Screen_One”的屏幕。

我将我的代码缩减为主要部分。我还尝试将 menu-kivy-code 放在一个单独的文件中并导入,但是我也无法访问 ScreenManager 并且无法切换屏幕。

FJS*_*lla 5

ScreenManager.current属性是当前显示的屏幕的名称。您尚未在类(屏幕)中设置 name 属性。您的demo.kv文件应该是:

<Display>:
    BoxLayout:
        orientation: "vertical"

        BoxLayout:
            size_hint: 1, None
            height: '48dp'
            Button:
                text: 'One'
                on_release: sm.current = 'screen_one'  #<<<<<<<<<<<<<<<<
            Button:
                text: 'Two'
                on_release: sm.current = 'screen_two'  #<<<<<<<<<<<<<<<<

        ScreenManager:
            id: sm
            Screen_One:
            Screen_Two:

<Screen_One>:
    name: 'screen_one'      #<<<<<<<<<<<<<<<<
    Button:
        text: 'One'

<Screen_Two>:
    name: 'screen_two'      #<<<<<<<<<<<<<<<<
    Button:
        text: 'Two'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明