python - 使用具有长时间功能的 Gtk.spinner

标签 python gtk pygobject

我正在尝试在 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/

相关文章:

python - 为什么我使用 Flask-Autodoc 得到 "No module named ' flask.ext'"?

Python/Tkinter : How to reduce the size of the expanded frames to their first positions?

python - Linux Mint 17 tkinter 未安装

Python+RSVG+Cario : Scale SVG to printing size

json - 使用 JSON 序列化 Gtk TreeStore/ListStore

python 工具 Visual Studio - 步入不工作

c - GtkSourceGutter - 如何在特定行上呈现图标或文本

c++ - 使用 GTK 将 EGL 图像渲染到帧缓冲区

python - pygobject 创建拖放源

python - 如何使用 PyGI 获取带有 Wnck 的窗口列表?