2014-01-19 1 views
3

아래 코드를 사용하여 콤보 상자 항목에 ID 값을 저장하는이 예제 Key/Value pyqt QComboBox을 따랐습니다.문자열 대신 PyQt4.QtCore.QVariant 개체가 필요합니까?

self.combox_widget.addItem('Apples', 'Green') 
indx = self.combox_widget.currentIndex() 
print self.combox_widget.itemData(indx) 

그러나, 나는 데이터 값 (위의 예에서는 '녹색')를 검색하려고 노력하는 <PyQt4.QtCore.QVariant object at 0x02AC1A70>를 얻을. 내가 여기서 무엇을 놓치고 있니?

답변

10

임의의 "데이터"를 설정하고 검색하는 대부분의 Qt API는이를 QVariant로 저장합니다.

Python2 를 들어, 기본적으로, 당신이 그것을 설정하면 PyQt는 자동으로에 QVariant를 파이썬 객체 변환됩니다,하지만 당신은 그것을를 검색 때 자동으로 다시 변환되지 않습니다. 그래서 이런 것을 할 추가 조치를 취할 필요가 :

print self.combox_widget.itemData(indx).toPyObject() 

Python3를 들어, 기본적으로 변환은 항상 두 방향으로 자동으로 수행되므로 추가 단계가 필요하지 않습니다.

이 차이를 해결하려면, PyQt는이 sip 모듈을 사용하여 way to explicitly set the default mode을 제공 : 다른 PyQt는 모듈 가져 전에

import sip 
sip.setapi('QVariant', 2) 
from PyQt4 import QtCore, QtGui 

이 프로그램의 시작 부분에 한 번 수행 될 필요가 을하고, QVariant가 Qt API에 의해 결코 반환되지 않도록 보장합니다.

+0

고마워요 :) – Stacked