PyQt:如何使用QComboBox :: findData()找到元组?

时间:2012-10-11 10:39:42

标签: python qt pyqt qvariant

我无法让QComboBox::findData在我的PyQt应用程序中正常工作。

似乎PyQt没有正确地比较QVariant和Python元组,导致Qt找不到我的元组。示例如下:

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

a = Qt.QApplication([])

cb = Qt.QComboBox()
cb.addItem("Bah", (1,2))
cb.addItem("Foo", (3,4))

print cb.findData((1,2))
print cb.findData((3,4))

print cb.itemData(0)
print cb.itemData(1)

print cb.findData(cb.itemData(0))
print cb.findData(cb.itemData(1))

使用api = 2(自动转换QVariant< - > python)时,它找不到任何内容,我得到以下输出:

-1
-1
(1, 2)
(3, 4)
-1
-1

api = 1(没有自动转换),它只能在后者(无用)的情况下找到它:

-1
-1
<PyQt4.QtCore.QVariant object at 0x02FBF148>
<PyQt4.QtCore.QVariant object at 0x02FBF148>
0
1

知道如何让第一个案例工作(使用新元组findData,并自动转换QVariant)?

(使用PyQt 4.8.3,SIP 4.12.1和Qt 4.6.1)

1 个答案:

答案 0 :(得分:1)

从@ ekhumoru上面的评论中,用列表替换元组是一个合适的解决方法:(我的重点)

  

这可能更多是限制而不是错误。在...后面   在场景中,PyQt必须尝试转换Python类型   操作。显然,并非所有类型/操作的组合都是   支持的。可变性似乎是一个限制因素。 如果是元组   交换列表,上面的示例代码将起作用。