Как переключить включенное состояние виджетов на основе индекса 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
соответственно.