Как переключить включенное состояние виджетов на основе индекса QcomboBox

Я использую pyQT 4.8.3 для создания правильного графического интерфейса для плагина QGIS

Есть три виджета в форме

my_comboBox , my_lineEdit , my_spinBox

Предположим, что comboBox имеет три записи

'combo_first_item' , 'combo_second_item' , 'combo_third_item'

Что именно я хочу, так это

if 'combo_second_item' is selected, then my_lineEdit toggles state to disabled
if 'combo_third_item' selected, then my_spinBox toggles state to disabled

Итак, как я могу переключить включенное состояние виджетов в форме на основе выбранной строки (или значения индекса) из выпадающего списка?

Какой должен быть правильный сигнал -> назначение слотов? В отличие от QbuttonBox, QcomboBox не запускает слот SetDisabled

Благодарю.

1 ответ

Решение

Создайте словарь, который отображает строку в виджет:

widgets = {'combo_first_item': my_comboBox,
           'combo_second_item': my_lineEdit,
           'combo_third_item': my_spinBox}

И слот:

def disableWidget(currentIndex):
     widget = widgets[currentIndex]
     widget.setEnabled(False)
     # or anything else you want to do on the widget

Затем вы можете подключить currentIndexChanged[QString] сигнал к этому:

comboBox.currentIndexChanged['QString'].connect(disableWidget)

В качестве альтернативы вы можете использовать currentIndexChanged[int] и список вместо словаря.

PS: если это внутри экземпляра класса, поместите self соответственно.

Другие вопросы по тегам