如何从PyQt comboBox获取当前值

时间:2013-04-18 08:25:23

标签: python qt pyqt

我正在使用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中我试图获取当前组合框项目的文本。

所以,这可能吗?

感谢

2 个答案:

答案 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()))