0

我正在使用 PyQt 设计器,然后使用 pyuic4 对其进行转换。
我的 ui 文件有这个组合框,如下所示:

    self.comboBox = QtGui.QComboBox(self.groupBox_3)
    self.comboBox.setGeometry(QtCore.QRect(20, 30, 81, 22))
    self.comboBox.setObjectName(_fromUtf8("comboBox"))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))
    self.comboBox.addItem(_fromUtf8(""))

如您所见,我放在组合框中的文本没有显示在这部分代码中,但它确实显示在 gui 中。

通常当我有一些用户选择时,比如单选按钮,我可以做这个检查:

if self.RAnkle.isChecked():

我可以用输入文本做类似的事情。我正在尝试使用组合框执行此逻辑,就像我想说 self.comboBox.getText() 并返回用户选择的字符串一样。我尝试在这个http://pyqt.sourceforge.net/Docs/PyQt4/qcombobox.html上做一些项目, 但我无法让它工作。

例如,这段代码:

self.comboBox.activated()  

返回此错误消息:

TypeError: native Qt signal is not callable

我也尝试使用 itemData() 但我仍然收到错误:

TypeError: QComboBox.itemData(int, int role=Qt.UserRole): not enough arguments

我在回调内部这样做,所以我首先这样做:

self.analyzeButton.clicked.connect(self._AnalyzeData)

然后在函数 _AnalyzeData 我试图获取当前组合框项的文本。

那么,这可能吗?

谢谢

4

2 回答 2

2

好吧,关于您的错误,它们不是很不言自明吗?:-)

从您刚刚链接的文档中:

无效激活(int)

这是此信号的默认重载。当用户在组合框中选择一个项目时发送此信号。项目的索引被传递。请注意,即使选择未更改,也会发送此信号。如果您需要知道选择何时实际更改,请使用信号 currentIndexChanged()。

作为 Qt 信号,它不能直接被调用:它可以被发射,并且您可以创建一个在它发生时将被调用的槽。

QVariant QComboBox.itemData (self, int index, int role = Qt.UserRole)

返回组合框中给定索引中给定角色的数据,如果没有此角色的数据,则返回 QVariant.Invalid。

另请参见 setItemData()。

角色参数有一个默认值,所以你可以省略它,但你必须给出索引。

很高兴你找到了解决方案!

于 2013-04-18T15:25:29.343 回答
0

如果你想通过参数调用一个SLOTin connect function,你应该使用 lambda,例如:

QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), 
                               lambda: self.materialsInstance.setFilterDict_Insert("L",self,"name",self.lineEdit.text()))
于 2013-09-23T08:59:34.987 回答