【问题标题】:Kivy IDs needing a clock scheduleKivy ID 需要时钟时间表
【发布时间】:2021-01-01 13:48:33
【问题描述】:

我一直在尝试从 python 文件访问我的 .kv 文件中的小部件,我发现了一个奇怪的事情,如果我从屏幕上的 on_enter() 或 on_pre_enter() 事件访问 ID,.ids是空的,我无法访问我的小部件。 为了访问它们,我必须创建另一个方法并 Clock.schedule 它。谁能解释一下为什么会这样...

工作方法

class MainScreen(Screen):

    def add_labelinputs(self, dt):
        print(self.ids)
    
    def on_enter(self):
        Clock.schedule_once(self.add_labelinputs)

不工作的方法(空字典)

class MainScreen(Screen):

    def on_enter(self):
        print(self.ids)

基维文件

#:kivy 1.11.1

WindowManager:
    MainScreen:

<MainScreen>:
    name: 'MainScreen'

    GridLayout:
        id: mainLayout
        cols: 1

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    这是 Kivy 长期存在的问题。它只影响添加到kvScreenManager 的第一个Screen。一种解决方法是不使用kv 来构建ScreenManager。尝试将您的 kv 修改为:

    #:kivy 1.11.1
    
    <MainScreen>:
        name: 'MainScreen'
    
        GridLayout:
            id: mainLayout
            cols: 1
    

    并将您的 build() 方法修改为:

    def build(self):
        Builder.load_string(kv)  # assumes kv string is defined as above
        sm = WindowManager()
        sm.add_widget(MainScreen())
        return sm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多