首页 > 解决方案 > Gtk - Pixbuf.new_from_stream_at_scale_async 正在阻塞 UI

问题描述

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

这是我的代码:

    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, None, scaleImage)

    ...

    addWallpapers(list)
    window.show_all()

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

谢谢!

标签: python-3.xasynchronousgtk3pygtkglib

解决方案


推荐阅读