我想创建一个带有始终相同的菜单栏的 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 并且无法切换屏幕。
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)
| 归档时间: |
|
| 查看次数: |
5227 次 |
| 最近记录: |