其他分享
首页 > 其他分享> > 使用带有长时间功能的Gtk.spinner

使用带有长时间功能的Gtk.spinner

作者:互联网

我正在尝试在python中使用Pygobject工作gtk.spinner.最主要的是,我使用此元素向用户显示了长时间的操作正在进行中.问题在于微调器在执行该功能时会停止.

代码在这里:

.....
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)

标签:gtk,pygobject,python
来源: https://codeday.me/bug/20191030/1971243.html