我正在使用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():
我可以用输入文字做类似的事情。我试图用comboBox做这个逻辑,就像我想说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中我试图获取当前组合框项目的文本。
所以,这可能吗?
感谢
答案 0 :(得分:2)
那么,关于你的错误,他们不是很明显吗? : - )
来自您刚刚链接的文档:
void activated(int)
这是此信号的默认过载。此信号在发送时发送 用户在组合框中选择一个项目。项目的索引已通过。 请注意,即使未更改选项,也会发送此信号。如果 你需要知道选择何时实际改变,使用信号 currentIndexChanged()。
作为Qt信号,它不能直接被调用:它可以被发射,你可以创建一个在它发生时被调用的插槽。
QVariant QComboBox.itemData(self,int index,int role = Qt.UserRole)
返回给定索引中给定角色的数据 组合框,或QVariant。如果此角色没有数据,则无效。
另见setItemData()。
role参数有一个默认值,因此你可以省略它,但你必须给出索引。
很高兴你找到了解决方案!
答案 1 :(得分:0)
如果你想通过参数传递调用SLOT
中的connect function
,你应该使用lambda,例如:
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")),
lambda: self.materialsInstance.setFilterDict_Insert("L",self,"name",self.lineEdit.text()))