Kivy 不使用操作栏上的按钮更改屏幕
Kivy not changing screens with button on actionbar
我引用的代码来自 ikolim 的回答:
这是我的 python 代码:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.core.window import Window
Window.clearcolor = (1,1,1,1)
Builder.load_file("designdawkalamomarunong.kv")
class Menu(BoxLayout):
manager = ObjectProperty(None)
class Add(Screen):
pass
class Help(Screen):
pass
class Credits(Screen):
pass
class Manager(ScreenManager):
addScreen = ObjectProperty(None)
helpScreen = ObjectProperty(None)
creditsScreen = ObjectProperty(None)
class AntsApp(App):
def build(self):
return Menu()
if __name__ == '__main__':
AntsApp().run()
这是 kivy 代码:
<Menu>:
manager: screen_manager
orientation: "vertical"
ActionBar:
size_hint_y: 0.1
ActionView:
ActionPrevious:
ActionButton:
text: "Add"
on_release: app.root.current = "add"
ActionButton:
text:"Help"
on_release: app.root.current = "help"
ActionButton:
text: "Credits"
on_release: app.root.current = "credits"
Manager:
id: screen_manager
<Add>:
text: "hello boi"
<Help>:
text: "hello world"
<Credits>:
text: "goodbye world lol"
<Manager>:
id: screen_manager
addScreen: addScreen
helpScreen: helpScreen
creditsScreen: creditsScreen
Add:
id: addScreen
name: 'add'
manager: screen_manager
Help:
id: helpScreen
name: 'help'
manager: screen_manager
Credits:
id: creditsScreen
name: 'credits'
manager: screen_manager
当我运行它时,这是输出:
当我点击操作栏上的按钮时,return 没有任何反应。我应该添加其他东西吗?提前谢谢你:)
编辑:
试过这样做:
<Add>:
Button:
text: "hello boi"
它起作用了,但是当我尝试这个时:
<Add>:
Label:
text: "hello boi"
没用。我在这里错过了什么?
问题
kv 文件
- 将所有
app.root.current
替换为 root.manager.current
,因为 root
是 BoxLayout
小部件而不是 ScreenManager
小部件。
- 每个屏幕在
text
之前缺少一个 Label
小部件。
- 当您在屏幕的每个 class 规则中将 Button 小部件实例化为子项时,文本是可见的。但是,当您将 Button 小部件替换为 Label 时,文本将不可见。原因是因为Label的默认颜色文本是白色的(
rgba=1, 1, 1, 1
),而BoxLayout的颜色也是白色的。因此,您无法看到文本。如果使用标签小部件,请添加 color: (0, 0, 0, 1) # black color text
.
例子
kv 文件
#:kivy 1.11.0
<Menu>:
manager: screen_manager
orientation: "vertical"
ActionBar:
size_hint_y: 0.1
ActionView:
ActionPrevious:
ActionButton:
text: "Add"
on_release: root.manager.current = "add"
ActionButton:
text:"Help"
on_release: root.manager.current = "help"
ActionButton:
text: "Credits"
on_release: root.manager.current = "credits"
Manager:
id: screen_manager
<Add>:
Label:
text: "hello boi"
color: 0, 0, 0, 1 # black color text
<Help>:
Label:
text: "hello world"
color: 0, 0, 0, 1 # black color text
<Credits>:
Label:
text: "goodbye world lol"
color: 0, 0, 0, 1 # black color text
<Manager>:
addScreen: addScreen
helpScreen: helpScreen
creditsScreen: creditsScreen
Add:
id: addScreen
name: 'add'
Help:
id: helpScreen
name: 'help'
Credits:
id: creditsScreen
name: 'credits'
输出
我引用的代码来自 ikolim 的回答:
这是我的 python 代码:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.core.window import Window
Window.clearcolor = (1,1,1,1)
Builder.load_file("designdawkalamomarunong.kv")
class Menu(BoxLayout):
manager = ObjectProperty(None)
class Add(Screen):
pass
class Help(Screen):
pass
class Credits(Screen):
pass
class Manager(ScreenManager):
addScreen = ObjectProperty(None)
helpScreen = ObjectProperty(None)
creditsScreen = ObjectProperty(None)
class AntsApp(App):
def build(self):
return Menu()
if __name__ == '__main__':
AntsApp().run()
这是 kivy 代码:
<Menu>:
manager: screen_manager
orientation: "vertical"
ActionBar:
size_hint_y: 0.1
ActionView:
ActionPrevious:
ActionButton:
text: "Add"
on_release: app.root.current = "add"
ActionButton:
text:"Help"
on_release: app.root.current = "help"
ActionButton:
text: "Credits"
on_release: app.root.current = "credits"
Manager:
id: screen_manager
<Add>:
text: "hello boi"
<Help>:
text: "hello world"
<Credits>:
text: "goodbye world lol"
<Manager>:
id: screen_manager
addScreen: addScreen
helpScreen: helpScreen
creditsScreen: creditsScreen
Add:
id: addScreen
name: 'add'
manager: screen_manager
Help:
id: helpScreen
name: 'help'
manager: screen_manager
Credits:
id: creditsScreen
name: 'credits'
manager: screen_manager
当我运行它时,这是输出:
当我点击操作栏上的按钮时,return 没有任何反应。我应该添加其他东西吗?提前谢谢你:)
编辑: 试过这样做:
<Add>:
Button:
text: "hello boi"
它起作用了,但是当我尝试这个时:
<Add>:
Label:
text: "hello boi"
没用。我在这里错过了什么?
问题
kv 文件
- 将所有
app.root.current
替换为root.manager.current
,因为root
是BoxLayout
小部件而不是ScreenManager
小部件。 - 每个屏幕在
text
之前缺少一个Label
小部件。 - 当您在屏幕的每个 class 规则中将 Button 小部件实例化为子项时,文本是可见的。但是,当您将 Button 小部件替换为 Label 时,文本将不可见。原因是因为Label的默认颜色文本是白色的(
rgba=1, 1, 1, 1
),而BoxLayout的颜色也是白色的。因此,您无法看到文本。如果使用标签小部件,请添加color: (0, 0, 0, 1) # black color text
.
例子
kv 文件
#:kivy 1.11.0
<Menu>:
manager: screen_manager
orientation: "vertical"
ActionBar:
size_hint_y: 0.1
ActionView:
ActionPrevious:
ActionButton:
text: "Add"
on_release: root.manager.current = "add"
ActionButton:
text:"Help"
on_release: root.manager.current = "help"
ActionButton:
text: "Credits"
on_release: root.manager.current = "credits"
Manager:
id: screen_manager
<Add>:
Label:
text: "hello boi"
color: 0, 0, 0, 1 # black color text
<Help>:
Label:
text: "hello world"
color: 0, 0, 0, 1 # black color text
<Credits>:
Label:
text: "goodbye world lol"
color: 0, 0, 0, 1 # black color text
<Manager>:
addScreen: addScreen
helpScreen: helpScreen
creditsScreen: creditsScreen
Add:
id: addScreen
name: 'add'
Help:
id: helpScreen
name: 'help'
Credits:
id: creditsScreen
name: 'credits'