Kivy:如何在等待显示另一个小部件时显示一个小部件(均从同一事件调用)

Kivy: how to display a widget while waiting for another one to be displayed (both called from a same event)

当点击 "OK button" 时,我的 kivy 应用程序会检索有时包含 100 多个文件夹的列表,并显示一个 GridLayout,其中每个文件夹有 4 列和 1 行。每行有 3 个可滚动标签和 1 个复选框。这个 GridLayout 有时需要接近 12 秒才能生成,所以我想同时显示一些东西(标签,图像......)。

尝试 1: 我的 "Ok button" 调用 def DisplayTable。我尝试在 DisplayTable 的开头简单地添加 self.add_widget(Label_when_waiting)(因此在任何处理或生成 GridLayout 之前),但 Label_when_waiting 仅在显示 GridLayout 时显示。

尝试 2: 我试图将 def DisplayTable 分成两个 def,Diplay_Label_when_waiting(由 "OK button" 调用的那个)和 DisplayTable:

def Diplay_Label_when_waiting(self, *args):
    self.add_widget(Label_when_waiting)
    DisplayTable(self, *args)

但是这里又是,Label_when_waiting只有在显示GridLayout的时候才会显示。

那么我如何在 GridLayout 之前显示 Label_when_waiting 知道两个显示都必须由 "Ok button"

触发

使用Clock.schedule_once显示标签后的Grid:

def Diplay_Label_when_waiting(self, *args):
    self.add_widget(Label_when_waiting)
    Clock.schedule_once(lambda dt: DisplayTable(self, *args), 0)

您还可以使用 delayable 来自 kivyoav(免责声明 - 我是作者...)

from kivyoav.delayed import delayable

@delayable
def Diplay_Label_when_waiting(self, *args):
    self.add_widget(Label_when_waiting)
    yield 0.0 # delay of 0ms , will cause the UI to update...
    DisplayTable(self, *args)