リファレンス - QVariantからオリジナルのPythonデータを取得する方法




qt reference (2)

私は最近PythonとQtを学んでいるだけです。 だからこれは初心者の質問になることを検討してください、しかし私はここで立ち往生しています。

import sys
from PyQt4.QtCore import *

data1 = 'string'
data2 = QVariant(data1)
data3 = data2.toPyObject()

data3はdata1の 'string'と同じです。 しかし私のシステムではdata3は

PyQt4.QtCore.QString(u'string')

処理したいデータが例のように単純であれば大したことではありませんが、「dict」型のデータを処理したいのでこの問題を解決する必要があります。

これはエンコードの問題だと思いますが、それを修正する方法が見つかりません。

*すべての文書で私はそれを宣言しています:

#-*- coding: utf-8 -*-

https://code.i-harness.com


data1data3を比較する前に、 QStringをPythonの文字列に変換する必要があります。

>>> same_as_data1 = str(data3)

これで同じ文字列が返されました。

>>> data1 == data
data1 == same_as_data1
True

文字列が(キーまたは値として)現れるところはどこでもQStringにマップされます。 手動で変換を行うことができます。例えば:

d = QVariant({'key1':123}).toPyObject()
d_with_str_keys = dict((str(k), v) for k,v in d.iteritems())

または、 QString上記で指摘したように、 QString動作を変更することもできます。


この問題を回避するには、データを不変のコンテナにラップします。

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




qvariant