2013-04-18 11 views
0

Я использую конструктор PyQt, а затем преобразовываю его с помощью pyuic4.
Мой файл Пользовательский интерфейс этой COMBOBOX который выглядит следующим образом:Как получить текущее значение от PyQt comboBox

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 Я пытаюсь получить текст текущего элемента combobox.

так, это возможно?

благодаря

+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().

Параметр role имеет значение по умолчанию, поэтому его можно опустить, но вы должны указать индекс.

Рад, что вы нашли решение в любом случае!

+0

хорошо, поэтому я нашел решение, но на самом деле это не то, что я пытался сделать, и я просто понял, что это ха-ха. Я пытался сказать, что если у меня есть combobox со значениями, как я могу запросить, выбрано ли определенное значение, просто используя его имя, или мне нужно знать индекс имени. – user1938107

0

Если вы хотите вызвать SLOT в connect function с аргументом прохождения следует с помощью лямбда, такие как:

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