PySide2: TypeError: объект 'bytes' нельзя интерпретировать как целое число - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть этот код 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())

Но в Windows с Python 3.6 он не работает здесь:

  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 голосов
/ 03 ноября 2018

Похоже, QBuffer.data() тип возвращаемого значения QByteArray (который, вероятно, не может быть обработан конструктором bytes()), однако QByteArray.data() тип возвращаемого значения bytes. Итак, я думаю, вы должны попробовать return buffer.data().data() вместо return bytes(buffer.data()).

0 голосов
/ 12 сентября 2018

Это обходной путь.

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

Если возможно, я бы хотел избежать временного файла.Другие решения приветствуются.

...