PySide2:TypeError:'字节'对象不能解释为整数

时间:2018-09-12 09:13:44

标签: python pyqt pyside pyside2

我有这个PySide2代码,可在Linux上使用Python 2.7

from PySide2.QtCore import QBuffer, QByteArray

...

image = self.clipboard.image()
ba = QByteArray()
buffer = QBuffer(ba)
buffer.open(QIODevice.WriteOnly)
image.save(buffer, "PNG")
return bytes(buffer.data())

但是在具有Python 3.6的Windows上,它在这里失败:

  File "C:\....foo.py", line 93, in image_to_png
    return bytes(buffer.data())

例外:

TypeError: 'bytes' object cannot be interpreted as an integer

获取PNG字节的最简单方法是什么?

我想避免创建一个临时文件,因为在这种情况下不需要它。

(我使用PySide2,但如果您认为更有意义,则可以切换到其他python-QT绑定。如果您认为这样,请发表评论)

2 个答案:

答案 0 :(得分:2)

看起来QBuffer.data()的返回类型为QByteArraybytes()构造函数可能无法处理),但是QByteArray.data()的返回类型为bytes。因此,我认为您应该尝试使用return buffer.data().data()而不是return bytes(buffer.data())

答案 1 :(得分:0)

这是一种解决方法。

def image_to_png(image):
    temp_png = tempfile.mktemp('.png')
    image.save(temp_png)
    with io.open(temp_png, 'rb') as fd:
        content = fd.read()
    os.unlink(temp_png)
    return content

如果可能,我想避免使用临时文件。欢迎其他解决方案。