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)
当点击 "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)