0

I am trying to add three depending comboboxes in Qt with python. That means that you can change one combobox which changes the list of items in the secound combobox. There you can select another item which changes the selection in the third combobox. Therefore i use qtpy as connection between both.

What is really important: The connection of all three comboboxes!

It worked all fine until you change the first combobox for a second time (It worked all fine while changing the secound & third combobox all the time)

My goal is to change the values in all three comboboxes depending on the first combobox (and secound) as often as i want to.

Here is my code:

    self.ui.type1CB.currentTextChanged.connect(self.type1_changed)
    self.ui.type2CB.currentTextChanged.connect(self.type2_changed)


def type1_changed(self):
    self.ui.type2CB.clear()

    type1 = self.ui.type1CB.currentText()
    rev = ["Ge", "Er"]
    cos = ["Au", "Fr", "pe", "So", "Wo"]

    if type1 == "Ei":
        self.ui.type2CB.addItems(rev)
    elif type1 == "Au":
        self.ui.type2CB.addItems(cos)
    else:
        self.ui.type2CB.addItems(" ")

def type2_changed(self):
    self.ui.type3CB.clear()

    type2 = self.ui.type2CB.currentText()
    sa = ["Ge", "Li", "To"]
    re = ["Pf", "Ne", "Ve"]
    ca = ["Be", "Re", "Ve"]
    le = ["Au", "Be", "Ur"]
    pr = ["Le", "Ge", "Sü", "Kl", "Hy", "Ge", "Ve"]
    ot = ["An", "Ar", "Fa", "Ba", "Fe"]
    ho = ["Ha", "Ne", "Te", "Mi"]

    if type2 == "Ge":
        self.ui.type3CB.addItems(sa)
    elif type2 == "Er":
        self.ui.type3CB.addItems(re)
    elif type2 == "Au":
        self.ui.type3CB.addItems(ca)
    elif type2 == "Fr":
        self.ui.type3CB.addItems(le)
    elif type2 == "pe":
        self.ui.type3CB.addItems(pr)
    elif type2 == "So":
        self.ui.type3CB.addItems(ot)
    elif type2 == "Wo":
        self.ui.type3CB.addItems(ho)
    else:
        self.ui.type3CB.addItems(" ")

1 Answer 1

0

error is in this line:

    else:
        self.dlg.type3CB.addItems(" ")

if you are using addItems you need to provide list, and you are providing string

you can do it in two ways:

1. use addItem

addItem(const QString &text, const QVariant &userData = QVariant())

    self.dlg.type3CB.addItem(" ")

2. use addItems

addItems(const QStringList &texts)

    self.dlg.type3CB.addItems([" "])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.