如何在 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)
此外,来自 QDataStream
的 writeBytes
未由 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何从具有 PySide2 GUI 的 python 脚本构建一个 mac os 应用程序?
PySide2 和 Matplotlib:如何让 MatPlotLib 在单独的进程中运行? ..因为它不能在单独的线程中运行