首页 > 解决方案 > Kivy 不使用操作栏上的按钮更改屏幕

问题描述

我提到的代码来自 ikolim 的回答:为什么我的 Kivy Actionbar 不见了?

这是我的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()

这是基维代码:

<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

当我运行它时,这是输出: 程序输出

当我单击操作栏上的按钮时,它不会返回任何内容。我应该添加其他东西吗?先感谢您 :)

编辑:尝试这样做:

<Add>:
    Button:
        text: "hello boi"

它有效但是当我尝试这个时:

<Add>:
    Label:
        text: "hello boi"

那没起效。我在这里想念什么?

标签: pythonpython-3.xkivykivy-language

解决方案


问题

.kv 文件

  1. 替换所有出现的app.root.current因为root.manager.currentrootBoxLayout部件而不是ScreenManager小部件。
  2. 每个屏幕Labeltext.
  3. 当您在 Screen 的每个类规则中将 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'

输出

图片01


推荐阅读