我正在将一个应用程序从PyQt5更新到PyQt6.该应用程序使用非常大的图像文件.我已经更新了使用PyQt6的代码,但是,当我运行Python脚本时,现在出现了一个错误:

QImageIOHandler:拒绝映像,因为它超过了当前分配

请在此处查看Qt6文档:QImageReader::setAllocationLimit()

...这里是:QImageReader::allocationLimit()

文档表明setAllocationLimit可以用来更改这个128兆字节的限制.

我的问题是这些属性似乎没有出现在Python版本(PyQt6)中.以下是PyQt6和QImageReader类的文档,setAllocationLimit和AllocationLimit不存在:QImageReader.

我有什么遗漏吗?我觉得如果我可以访问PyQt6中的setAllocationLimit,它会解决我的问题,但我在任何地方都找不到它.

推荐答案

这个API目前没有包装在PyQt6中,这显然是一个bug.同时,解决方法是设置环境变量QT_IMAGEIO_MAXALLOC:

>>> path = 'path/to/large-image.jpg'
>>> os.path.getsize(path) // 1024 // 1024
9
>>> r = QtGui.QImageReader(path)
>>> os.environ['QT_IMAGEIO_MAXALLOC'] = "1"
>>> r.read()
qt.gui.imageio: QImageIOHandler: Rejecting image as it exceeds the current allocation limit of 1 megabytes
>>> os.environ['QT_IMAGEIO_MAXALLOC'] = "10"
>>> r.read()
<PyQt6.QtGui.QImage object at 0x7f1d51857d10>

如果你想在下一个PyQt6版本中修复上述错误,请在mailing list上报告.维护人员通常非常主动,所以应该很快修复(假设这是一个相对简单的添加).

Python相关问答推荐

在有限数量的唯一字母的长字符串中,找到包含重复不超过k次的所有唯一字母的最长子字符串

两极:滚动组,起始指数由不同列设置

回归回溯-2D数组中的单词搜索

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

具有多个组的条形图的不同y标度

pyramid 内部数组中的连续序列-两极

Python -根据另一个数据框中的列编辑和替换数据框中的列值

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

Polars LazyFrame在收集后未返回指定的模式顺序

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

未删除映射表的行

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

C#使用程序从Python中执行Exec文件

cv2.matchTemplate函数匹配失败

迭代嵌套字典的值

计算天数

如何在Python中获取`Genericums`超级类型?

用渐近模计算含符号的矩阵乘法

Polars将相同的自定义函数应用于组中的多个列,