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 文件

  1. 将所有 app.root.current 替换为 root.manager.current,因为 rootBoxLayout 小部件而不是 ScreenManager 小部件。
  2. 每个屏幕在 text 之前缺少一个 Label 小部件。
  3. 当您在屏幕的每个 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'

输出