如何在树周围移动kv中定义的小部件?

2024-09-28 03:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

为了使ActionPrevious的标题文本可点击(更多信息请参见this question),我试图修改^{}文件中定义的默认小部件树。我的尝试是在__init__期间通过id访问小部件。这就是我的子类的外观:

class LogoutButton(ActionPrevious):
    def __init__(self, **kwargs):
        super(LogoutButton, self).__init__(**kwargs)
        print(self.children)      # prints an empty tuple
        print(self.ids)           # prints an empty dictionary
        lb = self.ids['title']
        self.remove_widget(lb)
        self.ids['prevlayout'].add_widget(lb)

因此,这些打印显示在__init__期间没有任何子项,尽管我已经调用了ActionPrevious的__init__
我知道我试图实现的目标可以通过复制整个定义和调整缩进来实现,但它似乎有点太大了,我不想在我的代码中有这样的东西。我可以在不复制kv定义的情况下使用子类和Python执行同样的操作吗


Tags: selfanids定义init部件widgetprints
1条回答
网友
1楼 · 发布于 2024-09-28 03:19:15

如果要读取idschildren表,应该等到第二个kivy循环帧。在这里,您试图在第一个循环帧中访问它们,然后再将它们放在一个小部件树中

您应该做的是等待第一帧结束,然后读取值。最简单的方法是使用^{}装饰器。例如:

from kivy.clock import mainthread

class LogoutButton(ActionPrevious):
    def __init__(self, **kwargs):
        super(LogoutButton, self).__init__(**kwargs)
        self.do_something()

    @mainthread
    def do_something(self):
        print(self.children)
        print(self.ids)
        lb = self.ids['title']
        self.remove_widget(lb)
        self.ids['prevlayout'].add_widget(lb)

相关问题 更多 >

    热门问题