卡在 Kivy 中的类函数

Posted

技术标签:

【中文标题】卡在 Kivy 中的类函数【英文标题】:Stuck with Class Function in Kivy 【发布时间】:2021-12-20 15:36:36 【问题描述】:

所以我一直在创建这个 Kivy 应用程序,但是发生了这种情况

class MyScreenManager(ScreenManager):
    def __init__(self, **kwargs):
        super(MyScreenManager, self).__init__(**kwargs)
        '''conn = sqlite3.connect('first_db.db')
        c = conn.cursor()
        c.execute("SELECT name FROM sqlite_master WHERE type='table';")
        screens = c.fetchall()
        for i in range(len(screens)):
            self.add_note()
        c.close()'''
        self.add_note()
    def add_note(self, name = ""):
        self.add_widget(NoteScreen(name = name))
        print(self.parent)

我的 .kv 文件

    MDNavigationLayout:
        x: toolbar.height
        size_hint_y: 1.0 - toolbar.height/root.height

        MyScreenManager:
            id: screen_manager

            NoteScreen:
                name: "Home"

当我运行应用程序时,它没有打印出 MyScreenManager 的父级,即 MDNavigationLayout,而是打印出“None”。我不知道如何解决它。有人可以帮帮我吗?

【问题讨论】:

这能回答你的问题吗? Kivy: get parent inside widget which is added in python 我不这么认为,因为 MDNavigationLayout 已经是 MyScreenManager 的父级 【参考方案1】:

self.parent 在使用__init__ 方法时不可用,因为该类首先被实例化,然后添加到其父级。

每documentation:

widget 的父级在widget 添加到另一个widget 时设置

基础Widget.__init_() 没有设置self.parent

由于 Kivy 为 parent 使用可观察的 property,因此可以在 on_parent 中添加操作

def on_parent(self, instance, value):
    super(MyScreenManager, self).on_parent(instance, value)
    self.add_note()

【讨论】:

哦,好的。你能推荐任何解决这个问题的方法吗?我想在第一次实例化该类时使用来自另一个父类的函数。我还是个初学者 @BachTran 查看更新

以上是关于卡在 Kivy 中的类函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 KIVY 集体卡在加载窗口

将函数绑定到kivy中的按钮

如何清除 kivy 中的小部件?

Kivy 将变量传递给类中的函数

如何将 Python 文件中的函数导入 Kivy 文件?

如何在 kivy 屏幕更改中调用类中的 def