【问题标题】:Python Kivy, Unable to add Label to screen with PythonPython Kivy,无法使用 Python 将标签添加到屏幕
【发布时间】:2016-05-08 01:15:34
【问题描述】:

我正在尝试使用 Python 和 Kivy 向屏幕添加一个简单的标签。我知道如何使用 Builder.load_string() 方法来做到这一点,但我希望通过 Python 使用 Kivy 库来做到这一点。

当我运行下面的代码时,我得到一个空白的紫色屏幕,但是当我将标签放入 Builder.load_string() 方法时它工作正常。我做错了什么?

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string("""
<HomePage>:
    FloatLayout:
        canvas.before:
            Color:
                rgb: .5,0,.75
            Rectangle:
                size: self.size
""")


class HomePage(Screen):
    layout = FloatLayout()
    home_title = Label(text="text")
    layout.add_widget(home_title)


class LabelApp(App):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(HomePage(name='home'))
        return sm

if __name__ == "__main__":
    LabelApp().run()

【问题讨论】:

    标签: python widget screen kivy


    【解决方案1】:

    这取决于你想做什么:如果你总是想将这些小部件添加到HomePage,你应该在HomePage__init__方法中这样做(不要忘记在那里添加self.add_widget(layout) .

    您也可以将它们添加到 LabelApps build 方法中。只需将HomePage 分配给一个变量,然后再次使用add_widget

    【讨论】:

    • 好的,现在我需要了解为什么我所做的某些事情会奏效。我尝试只使用 def __init__(self): 并添加布局,但它给出了一个错误:AttributeError: 'HomePage' object has no attribute '_trigger_layout' 然后我添加了一个额外的行,但我不明白为什么它解决了我的问题。我添加了下面显示的超级行,然后尝试用下面的 Screen.init 行替换它。两者都有效,为什么? super(HomePage, self).__init__(**kwargs) Screen.__init__(self)
    • @jdanaher 请务必致电super。查看示例in kivy's basic guide
    • 谢谢你,这对阅读很有帮助!我可以在重载 Screen 类的每个屏幕上调用 super 吗?
    • @jdanaher 也许您应该查看有关 python 中的类和继承的教程。通常,每当您定义某事物的子类并覆盖__init__ 方法时,您都会调用super。在这种特殊情况下,super(HomePage, self) 返回Screen
    • 啊好吧,是的。我在 python 中为我本周早些时候遇到的一个问题而苦苦挣扎,最终决定了一个解决方法。我现在将专注于首先弄清楚这一点。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    相关资源
    最近更新 更多