将我的小部件添加到 Kivy App __init__ 会导致黑屏和警告

Posted

技术标签:

【中文标题】将我的小部件添加到 Kivy App __init__ 会导致黑屏和警告【英文标题】:Adding my Widget to Kivy App __init__ leads to blank screen and Warning 【发布时间】:2015-08-07 06:23:19 【问题描述】:

几天前我开始学习 Kivy Crash Course,想写一个记忆游戏。我的 App Class 是这样的:

   class MemoryApp(App):
    def build(self):
        self.mgw = MemoryGameWidget()
        return self.mgw

此代码适用于我的 .kv 文件。

我总是使用 Pycharm Code Inspect 检查我的代码。 Pycharm 建议将属性移动到 init

class MemoryApp(App):
def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.mgw = MemoryGameWidget()

但是当我运行该代码时,我得到一个空窗口和这个警告:

 [WARNING           ] <__main__.MemoryGameWidget object at 0x02BCC490> have no cols or rows set, layout is not triggered.

谁能解释发生了什么以及我做错了什么?

【问题讨论】:

我忘记添加第二类的构建函数:def build(self): return self.mgw MemoryApp 是继承自 Widget 还是布局类? MemoryGameWidget 继承自 GridLayout 和 MemoryApp 继承自 App 【参考方案1】:

但是把它放在__init__ 中,你在它的 kv 规则被加载之前实例化了这个小部件,所以这个规则没有被应用。我会把它留在 build 方法中并忽略 pycharm 警告。

编辑:实际上,解决警告的适当方法可能是在__init__ 中添加“self.mgw = None”,从而满足 pycharm 认为该属性正确存在而不改变它在构建中实际正确设置的方式方法。

【讨论】:

以上是关于将我的小部件添加到 Kivy App __init__ 会导致黑屏和警告的主要内容,如果未能解决你的问题,请参考以下文章

尽管更新了小部件,但 Pyqt5 更新的小部件未添加到布局中

Kivy - 使用 .kv

在 kivy (python) 中更新小部件

如何清除 kivy 中的小部件?

滚动小部件中的 Kivy 标签文本换行

如果未动态添加,如何正确删除Kivy中的小部件