Kivy和菜单栏

时间:2017-06-26 23:40:10

标签: python kivy

我想创建一个带有菜单栏的Kivy-App,它总是一样的。

我的代码:

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

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>:
    Button:
        text: 'One'

<Screen_Two>:
    Button:
        text: 'Two'

但如果我点击&#34; One&#34;它不会起作用。我收到了:

  

kivy.uix.screenmanager.ScreenManagerException:No screen with name&#34; Screen_One&#34;。

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

1 个答案:

答案 0 :(得分:3)

PHPLiveRegex属性是当前显示的屏幕的名称。您尚未在类(屏幕)中设置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'

ScreenManager.current