【问题标题】:Kivy Widget ids access in __init__ [duplicate]__init__中的Kivy Widget ids访问[重复]
【发布时间】:2016-03-26 01:22:31
【问题描述】:

我在 kv 文件中定义了一个简单的自定义小部件:

<CustomWidget>:
    TextInput:
        id: text_input

还有一个实现它的类:

class CustomWidget(BoxLayout):
    def __init__(self, *args, **kwargs):
        super(CustomWidget, self).__init__(*args, **kwargs)
        self.ids['text_input'].bind(insert_text=numeric_filter)

此代码失败,因为在我尝试使用它时未填充self.ids。是否有一些 kivy.uix.Widget 的回调或函数,我可以覆盖它们以执行第一次设置我的小部件?

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您可以使用Clock.schedule_once(..., 0) 来安排对依赖于ids 的函数的调用已构建:

    class CustomWidget(BoxLayout):
        def __init__(self, *args, **kwargs):
            super(CustomWidget, self).__init__(*args, **kwargs)
            Clock.schedule_once(self.init_ui, 0)
        def init_ui(self, dt=0):
            self.ids['text_input'].bind(insert_text=numeric_filter)
    

    【讨论】:

    • 好的,这似乎是最好的选择。在这里提出了同样的建议stackoverflow.com/a/35430569/1008902
    • @DikobrAz 实际上我认为这个问题与stackoverflow.com/q/26916262/1893154 重复
    • @zeeMokeez 是的,但是这个问题太长了......我在寻找我的问题时没有找到它。让社区或版主决定是否删除此问题。
    • @DikobrAz 实际上我认为这个问题更好(更简洁)。所以我认为它不应该被删除。
    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 2015-07-24
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多