2017-01-21 7 views
1

아래 코드는 QSettings 개체를 사용하여 파이썬 data 사전을 저장합니다. 사전을 다시 읽은 후 그래서 같은 QString 등 모든 키와 함께 제공 :QSettings로 파이썬 사전을 저장하는 방법

{PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2} 

가이 같은 일반 문자열 키를 사용하여 사전을 읽을 수있을 것인지 궁금 :

{'one': 1, 'two': 2} 

코드 :

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

settings = QtCore.QSettings('apps', 'settings') 

data = {'one': 1, 'two': 2} 

settings.setValue('data', data) 

data = settings.value('data').toPyObject() 
print data 

답변

1
  • Python2

직접 사용할 수 없으며 일반 사전으로 변환해야합니다.

d = {} 
for k, v in data.items(): 
    d[str(k)] = v 

전체 코드 :

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

settings = QtCore.QSettings('apps', 'settings') 

data = {'one': 1, 'two': 2} 

settings.setValue('data', data) 

data = settings.value('data').toPyObject() 
d = {} 
for k, v in data.items(): 
    d[str(k)] = v 

print(d) 

출력 :

{'two': 2, 'one': 1} 
  • Python3
,

일반 사전을 반환하므로 더 이상 toPyObject()로 변환 할 필요가 없으므로이 문제가 존재하지 않습니다.

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

settings = QtCore.QSettings('apps', 'settings') 

data = {'one': 1, 'two': 2} 

settings.setValue('data', data) 

data = settings.value('data') 
print(data) 

출력 : 당신이해야 할 모든 사용이다

{'one': 1, 'two': 2} 
+2

그것은 파이썬 2에서이 작업을 수행 할 수있다 [sip.setapi] (http://pyqt.sourceforge.net /Docs/PyQt4/incompatible_apis.html) 파이썬 3과 동일한 동작을 얻으려고합니다. 왜 그 사람들이 그 코드에 불쾌한'QString'과'QVariant' 타입을 유지하고자하는지 모르겠습니다. 'str()'으로 변환하는 것은 또한 파이썬 2에서 버그가있다 - 디코드/인코딩 오류를 피하기 위해 항상 변환을 수행하려면'unicode()'를 사용해야한다. – ekhumoro

0
original = {PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2} 
converted = {str(k): val for k, v in original.items()} 
+0

이것은 특히 다른 것보다 훨씬 더 포괄적 인 대답으로 유용하기에 너무 간단합니다. 설명을 추가해야합니다. –