如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?

Posted

技术标签:

【中文标题】如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?【英文标题】:How to write bytes to a QDataStream in PySide and Python 3.X? 【发布时间】:2014-10-08 09:20:52 【问题描述】:

QDataStream 的 Qt 文档中说

QDataStream 类提供二进制数据到 QIODevice 的序列化。

这就是我想要做的。我想在 Python 3.X 上的 PySide 中将字节发送到 QDataStream

writeRawData 但是需要 unicode 作为输入。

import zlib
from PySide import QtCore

file = QtCore.QFile("test.dat")
file.open(QtCore.QIODevice.WriteOnly)

data = "some text"
compressed_data = zlib.compress(data.encode()) # type is now bytes

out = QtCore.QDataStream(file)
out.writeRawData(compressed_data)

给出一个TypeError

TypeError: 'PySide.QtCore.QDataStream.writeRawData' called with wrong argument types:
  PySide.QtCore.QDataStream.writeRawData(bytes)
Supported signatures:
  PySide.QtCore.QDataStream.writeRawData(unicode, int)

此外,来自 QDataStreamwriteBytes 未由 PySide (1.2.2) 实现。

那么,如何在 PySide 和 Python 3.X 中通过 QDataStream 发送二进制数据?


背景:最后我想通过QDataStream方便地将二进制数据发送到QSocket,并且我想在使用zlib之前对其进行压缩。

【问题讨论】:

【参考方案1】:

我可以回答我自己的问题。解决方案是将字节字符串包装在QByteArray 中,并使用QDataStream 的左移/右移运算符。

写作示例:

# wrap data (type byte) in QByteArray
bytearray = QtCore.QByteArray(data)

# write to data stream
qdatastream << bytearray

阅读示例:

# allocate empty qbytearray
bytearray = QtCore.QByteArray()

# read from data stream
qdatastream >> bytearray

【讨论】:

以上是关于如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyside中打开一个新窗口

如何从具有 PySide2 GUI 的 python 脚本构建一个 mac os 应用程序?

PySide2 和 Matplotlib:如何让 MatPlotLib 在单独的进程中运行? ..因为它不能在单独的线程中运行

如何从 PySide 访问 QML\QtQuick 控件?

如何让 QThreads 在控制台 PySide 程序中工作?

PySide——Python图形化界面入门教程