python - QVariantからオリジナルのPythonデータを取得する方法




2 Answers

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

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

私は最近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 -*-



辞書を文字列に変換し、eval(str)を実行した後に辞書に戻すことができます。

pydict  = {'key1': 'val1', 'key2': 'val2'}
variant = QtCore.QVariant( pydict )
...
pydict = eval( str( variant.toString() ) )
print pydict
>>> {'key1': 'val1', 'key2': 'val2'}

キーや値の1つを文字列から辞書に変換できない場合、evalが失敗する可能性があることに注意してください。 これは、組み込みの型(str、int、listなど)がない場合に起こりますが、問題ないでしょう。




Related