Kivy: how to display a widget while waiting for another one to be displayed (both called from a same event)(Kivy:如何在等待显示另一个小部件时显示一个小部件(都从同一个事件调用))
问题描述
单击确定按钮"时,我的 kivy 应用程序检索有时包含 100 多个文件夹的列表,并显示每个文件夹 4 列和 1 行的 GridLayout.每行有 3 个可滚动标签和 1 个复选框.这个 GridLayout 有时需要将近 12 秒才能生成,所以我想同时显示一些东西(标签、图像......).
When an "OK button" is clicking, my kivy app retrieves a list of sometimes 100+ folders and displays a GridLayout with 4 columns and 1 row per folder. Each row has 3 scrollable labels and 1 checkbox. This GridLayout sometimes takes close to 12 sec to be generated so I would like to display something (a label, an image...) in the meantime.
尝试 1: 我的确定按钮"调用 def DisplayTable.我试图简单地在 DisplayTable 的开头添加 self.add_widget(Label_when_waiting)
(所以在任何处理或生成 GridLayout 之前)但 Label_when_waiting
仅在 GridLayout 时显示显示.
Attempt 1: My "Ok button" calls a def DisplayTable. I tried to simply add self.add_widget(Label_when_waiting)
right at the beginning of DisplayTable (so before any processing or generating the GridLayout) but the Label_when_waiting
is displayed only when GridLayout is displayed.
尝试2:我试图将def DisplayTable分成两个def,Diplay_Label_when_waiting
(由确定按钮"调用的那个)和DisplayTable
:
Attempt 2: I tried to separate def DisplayTable into two def, Diplay_Label_when_waiting
(the one called by the "OK button") and DisplayTable
:
def Diplay_Label_when_waiting(self, *args):
self.add_widget(Label_when_waiting)
DisplayTable(self, *args)
但这里又是 Label_when_waiting
仅在显示 GridLayout 时才显示.
But here again, Label_when_waiting
is displayed only when GridLayout is displayed.
那么我如何在 GridLayout 之前显示 Label_when_waiting 知道两个显示都必须由确定按钮"触发
So how can I display Label_when_waiting before GridLayout knowing that both displays have to be triggered by the "Ok button"
推荐答案
使用Clock.schedule_once在标签显示后显示Grid:
Use Clock.schedule_once to display the Grid after the label is shown:
def Diplay_Label_when_waiting(self, *args):
self.add_widget(Label_when_waiting)
Clock.schedule_once(lambda dt: DisplayTable(self, *args), 0)
您也可以使用 kivyoav 中的 delayable(免责声明 - 我是作者...)
You can also use delayable from kivyoav (DISCLAIMER - I'm the author ...)
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)
这篇关于Kivy:如何在等待显示另一个小部件时显示一个小部件(都从同一个事件调用)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Kivy:如何在等待显示另一个小部件时显示一个小部件(都从同一个事件调用)


基础教程推荐
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01