【发布时间】:2017-07-05 21:55:46
【问题描述】:
我正在 Kivy 中填充树视图,这需要一些时间,具体取决于它的大小。
如果树很大并且需要一段时间,我想在填充时显示一个弹出窗口,以便用户知道程序没有冻结,并在填充树的逻辑完成时关闭此弹出窗口。
这是我通过对该主题的一些研究得出的结论,但弹出窗口似乎仍然只有在树完成填充后才会出现:
def show(self, *args):
self.error_popup.open()
def populate_tree(self, model):
#Clock.schedule_once(self.error_popup.open())
popup_thread = threading.Thread(target=self.show())
popup_thread.start()
# order the dictionary for better user experience
ordered_data = collections.OrderedDict(sorted(model.items()))
# logic to populate tree
for county, value in ordered_data.items():
if county != "model_name":
# set initial county dropdowns in tree
county_label = self.treeview.add_node(TreeViewButton(text=str(county), on_press=self.edit_node))
i = 0 # keep count of rules
# add rules children to county
for rule_obj, rule_list in value.items():
for rule in rule_list:
i += 1
# set rule number in tree
rule_label = self.treeview.add_node(TreeViewButton(text='Rule ' + str(i), on_press=self.edit_node), county_label)
# add conditions children to rule
for condition in rule:
self.treeview.add_node(TreeViewButton(text=condition, on_press=self.edit_node), rule_label)
#Clock.schedule_once(self.error_popup.dismiss())
#somehow close popup_thread
我包括了一个 kivy Clock 尝试,以防它更符合我正在寻找的内容,但目前它只会打开弹出窗口并且永远不会填充树。我是 GUI 编程和事件回调的新手,非常感谢任何帮助。
我尽量保持代码简短,如果需要更多,请告诉我。
【问题讨论】:
-
也许调用弹出窗口并在并行线程中运行您的方法,就像我为我的问题所做的那样:stackoverflow.com/questions/62691704/…
标签: python multithreading kivy