python-3.x - 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”的内容吗?
谢谢!
解决方案
推荐阅读
- android - 如何开发一个使用 VPN api 检索所有浏览信息的安卓应用程序?
- angular - 角度选择更改事件 - 类型“EventTarget”上不存在属性“值”
- r - 找出不同组内方差最大的变量
- swift - 为 Int 编写一个计算属性。迅速
- java - 添加填充有文本的 JTextArea/JTextPane 时防止 JSscrollPane 调整大小
- javascript - 迁移到 Firebase Admin SDK 后 Firebase 实时数据库规则出现问题
- angular - NzModal Angular 单元测试 aferClose
- jenkins - 如何触发 Autosys CA 以通过 Jenkins 部署 JIL 文件
- php - How can I change key in array of unlimited nested children from Eloquent query
- java - 我需要从网格视图中打开一个新活动。安卓工作室(Java)