我正在尝试在 python 中使用 Pygobject 来运行 gtk.spinner。最主要的是我使用这个元素来向用户展示一个长时间的 Action 正在进行中。问题是微调器在执行该功能时停止。
代码在这里:
.....
def create_image(self,spinner):
....
spinner.start()
# Heavy function
spinner.stop()
.....
这行不通。我愿意接受一些帮助,谢谢!
最佳答案
您的繁重功能需要偶尔让 GUI 处理累积的事件。例如,您可以偶尔运行:
while gtk.events_pending():
gtk.main_iteration()
另一种选择是让繁重的函数在单独的线程中运行,让主线程处理事件并旋转微调器。在这种情况下,您需要将 create_image
函数重新设计为异步的。例如:
def create_image(self, spinner, finishcb):
spinner.start()
def thread_run():
# call heavy here
heavy_ret = heavy()
gobject.idle_add(cleanup, heavy_ret)
def cleanup(heavy_ret):
spinner.stop()
t.join()
finishcb(heavy_ret)
# start "heavy" in a separate thread and immediately
# return to mainloop
t = threading.Thread(thread_run)
t.start()
现在,您无需调用 create_image
,而是需要向其传递一个回调,该回调将在图像准备就绪时调用。即,而不是:
image = self.create_image(spinner)
你写:
self.create_image(spinner, self.store_created_image)
关于python - 使用具有长时间功能的 Gtk.spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680430/