リファレンス - 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
data1
とdata3
を比較する前に、 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}