Изменить элемент ComboBox при изменении другого элемента ComboBox в pyqt5 - PullRequest
0 голосов
/ 03 августа 2020

У меня в GUI два комбинированных списка. Я хочу изменить значения во втором поле со списком на основе выбранного значения первого поля со списком.

Как и первое поле со списком, содержит значения a, b, c. Когда выбрано a , второе поле со списком будет иметь значения 1,2,3. Когда выбрано b , второе поле со списком будет иметь значения 4,5,6 и т. Д.

Я пытаюсь использовать оператор if else с методом currentText (), но это не так. изменить.

Вот мой код:

python ui:

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(832, 625)
        Dialog.setStyleSheet("background-color: rgb(85, 255, 255);")
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(140, 190, 481, 41))
        self.comboBox.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.comboBox.setObjectName("comboBox")
        self.comboBox_2 = QtWidgets.QComboBox(Dialog)
        self.comboBox_2.setGeometry(QtCore.QRect(140, 290, 481, 41))
        self.comboBox_2.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.comboBox_2.setObjectName("comboBox_2")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))

main

class cbox(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self):
        super(cbox,self).__init__()
        self.setupUi(self)
        list_1 = ['a', 'b', 'c']
        self.comboBox.addItems(list_1)
        list_2 = ['1','2','3']
        list_3 = ['4','5', '6']
        list_4 = ['7','8','9']
        if str(self.comboBox.currentText()) == 'a':
            self.comboBox_2.addItems(list_2)
        if str(self.comboBox.currentText()) == 'b':
            self.comboBox_2.addItems(list_3)
        if str(self.comboBox.currentText()) == 'c':
            self.comboBox_2.addItems(list_4)



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mwin = cbox()
    mwin.show()
    sys.exit(app.exec_())

Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 03 августа 2020

Вы должны использовать сигнал currentIndexChanged и подключиться к функции, которая обновляет содержимое другого комбо.

class cbox(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self):
        super(cbox,self).__init__()
        self.setupUi(self)
        list_1 = ['a', 'b', 'c']
        self.comboBox.addItems(list_1)
        list_2 = ['1','2','3']
        list_3 = ['4','5', '6']
        list_4 = ['7','8','9']
        self.comboBox_2.addItems(list_2)
        <b>self.sub_lists = list_2, list_3, list_4
        self.comboBox.currentIndexChanged.connect(self.updateCombo)</b>

    def updateCombo(self, index):
        # first of all, clear the current contents of the combo
        self.comboBox_2.clear()
        # then, add the new items, based on the new index
        self.comboBox_2.addItems(self.sub_lists[index])
...