問題描述
單擊確定按鈕"時,我的 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:如何在等待顯示另一個小部件時顯示一個小部件(都從同一個事件調用)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!