我按照此示例Key/Value pyqt QComboBox,使用下面的代码将ID值存储到组合框项目。
self.combox_widget.addItem('Apples', 'Green')
indx = self.combox_widget.currentIndex()
print self.combox_widget.itemData(indx)
然而,我在尝试检索DATA值时得到<PyQt4.QtCore.QVariant object at 0x02AC1A70>
(上例中的'Green')。我在这里缺少什么?
答案 0 :(得分: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模块,并确保任何Qt API都不会返回QVariant。