如何从QVariant获取原始python数据

Jon*_*ong 13 python pyqt data-conversion qvariant pyqt4

这些天我只是在学习python和Qt.所以请考虑这将是一个新手问题,但我被困在这里.

import sys
from PyQt4.QtCore import *

data1 = 'string'
data2 = QVariant(data1)
data3 = data2.toPyObject()
Run Code Online (Sandbox Code Playgroud)

我期望data3与data1,'string'相同.但是在我的系统中data3是

PyQt4.QtCore.QString(u'string')
Run Code Online (Sandbox Code Playgroud)

如果我想处理的数据很简单,例如,但是我想处理'dict'类型的数据,所以我需要解决这个问题,这不是什么大问题.

我认为这是编码问题,但找不到如何解决它.

*在每份文件中,我都声明:

#-*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

ekh*_*oro 14

您可以通过将数据包装在不可变容器中来解决此问题:

>>> from PyQt4.QtCore import QVariant
>>> data = {'key1': 123, 'key2': 456}
>>> v = QVariant((data,))
>>> v.toPyObject()[0]
{'key2': 456, 'key1': 123}
Run Code Online (Sandbox Code Playgroud)

  • @san.它不会使_data_不可变.如果数据放在不可变容器(例如元组)中,则不会尝试转换.元组无法转换为等效的C++类型,因此元组及其内容都将保持不变.同样值得指出的是,以这种方式做事有一个性能优势,因为它绕过了在Python和C++类型之间来回转换的所有开销. (3认同)