【问题标题】:PyQt4.QtCore.QVariant object instead of a string?PyQt4.QtCore.QVariant 对象而不是字符串?
【发布时间】:2014-02-08 15:25:43
【问题描述】:

我按照此示例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>(上例中的“绿色”)。我在这里错过了什么?

【问题讨论】:

    标签: python python-2.7 pyqt pyqt4


    【解决方案1】:

    大多数设置和检索任意“数据”的 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 返回。

    【讨论】:

    • 注意:对于 PyQt4 4.12.2 及更高版本,您需要使用“PyQt4.sip”模块进行 setapi() 调用,而不是“sip”模块。
    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 2021-08-11
    • 2017-07-18
    • 2011-07-29
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多