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

Sta*_*ked 3 python pyqt pyqt4 python-2.7

我按照这个示例键/值pyqt QComboBox,使用下面的代码将ID值存储到组合框项目.

self.combox_widget.addItem('Apples', 'Green')
indx = self.combox_widget.currentIndex()
print self.combox_widget.itemData(indx)
Run Code Online (Sandbox Code Playgroud)

但是,我开始<PyQt4.QtCore.QVariant object at 0x02AC1A70>尝试检索DATA值(上例中的'Green').我在这里错过了什么?

ekh*_*oro 10

大多数设置和检索任意"数据"的Qt API都会将其存储为QVariant.

对于Python2,默认情况下,PyQt会在你设置它时自动将python对象转换为QVariant,但是当你检索它时它不会自动将它们转换回来.所以你必须采取额外的步骤来做到这一点:

    print self.combox_widget.itemData(indx).toPyObject()
Run Code Online (Sandbox Code Playgroud)

对于Python3,默认情况下,转换始终在两个方向自动完成,因此不需要额外的步骤.

为了解决这个差异,PyQt提供了一种通过使用sip模块显式设置默认模式的方法:

import sip
sip.setapi('QVariant', 2)
from PyQt4 import QtCore, QtGui
Run Code Online (Sandbox Code Playgroud)

这需要在程序开始时,导入其他PyQt模块之前完成一次,并确保任何Qt API都不会返回QVariant.