2014-01-19 51 views
3

我遵循此示例Key/Value pyqt QComboBox,使用下面的代码将ID值存储到组合框项目。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的自动Python对象当你将它转换为一个的QVariant,但它不会自动再次将其转换时,你检索它。所以,你必须采取额外的步骤是这样做的:

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

对于Python3,默认情况下,转换总是自动在两个方向上进行的,因此不需要额外的步骤。

要解决这种差异,PyQt的使用sip模块提供了一个way to explicitly set the default mode

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

这需要在程序开始时进行一次,之前,其他PyQt的模块都是进口的,并将确保QVariant永远不会被任何Qt API返回。

+0

谢谢,工作:) – Stacked

相关问题