2013-04-18 42 views
0

我正在使用PyQt設計器,然後使用pyuic4轉換它。
我的UI文件中有此組合框,看起來像這樣:如何從PyQt組合框中獲取當前值

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

所以問題的答案是.currentText(),但是這將是很好,如果有人可以解釋錯誤的推理。 – user1938107

回答

2

那麼,關於你的錯誤,是不是很明顯? :-)

從文檔你剛纔鏈接:

void activated (int)

This is the default overload of this signal.This signal is sent when the user chooses an item in the combobox. The item's index is passed. Note that this signal is sent even when the choice is not changed. If you need to know when the choice actually changes, use signal currentIndexChanged().

由於Qt的信號,它不能直接調用:它可以發射,並且可以創建一個當它發生時,將調用插槽。

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

Returns the data for the given role in the given index in the combobox, or QVariant.Invalid if there is no data for this role.

See also setItemData().

的作用參數有一個默認值,因此可以省略,但你必須給索引。

很高興你找到了解決方案!

+0

好吧,所以我找到了一個解決方案,但它實際上並不是我想要做的,而我只是意識到它哈哈。我試圖說,如果我有一個帶值的組合框,我如何查詢是否通過使用它的名稱來選擇特定的值,還是我需要知道名稱的索引。 – user1938107

0

如果你想要把一個SLOTconnect function與參數傳遞,你應該使用lambda如:

QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), 
           lambda: self.materialsInstance.setFilterDict_Insert("L",self,"name",self.lineEdit.text()))