PyQt4.QtCore.QVariant对象而不是字符串?

时间:2014-01-19 13:31:27

标签: python python-2.7 pyqt pyqt4

我按照此示例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')。我在这里缺少什么?

1 个答案:

答案 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。

相关问题