Gtk - Pixbuf.new_from_stream_at_scale_async 阻塞 UI

问题描述

我想异步加载图像。我在 GLib 中使用异步函数,但它们仍然阻止用户界面,直到所有图像加载完毕。

这是我的代码

    def addWallpapers(wallpaperList):
        def addImage(stream,result):
            pixbuf = GdkPixbuf.Pixbuf.new_from_stream_finish(result)

            img_wallpaper = Gtk.Image.new_from_pixbuf(pixbuf)

            self.flow_wallpapers.insert(img,-1)
            self.flow_wallpapers.show_all()
        
        def scaleImage(file,result):
            inputStream = file.read_finish(result)
            GdkPixbuf.Pixbuf.new_from_stream_at_scale_async(inputStream,240,135,True,None,addImage)
        
        # Load images asynchronously
        for i in range(len(wallpaperList)):
            # Image
            img_path = wallpaperList[i]

            file = Gio.File.new_for_path(img_path)
            file.read_async(GLib.PRIORITY_DEFAULT,scaleImage)

    ...

    addWallpapers(list)
    window.show_all()

实际上,当我在 print 之后使用 window.show_all() 调用时,它似乎是异步运行的,它没有被阻止。但是 UI 本身被阻止并且在加载图像完成之前没有响应。我应该设置一些关于“异步调用不得阻塞 UI”的内容吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)