簡體   English   中英

通過pyqt用Python更改多個依賴的組合框

[英]Changing multiple depending comboboxes with Python through pyqt

我試圖用python在Qt中添加三個依賴的組合框 這意味着您可以更改一個組合框,該組合框將更改secound組合框中的項目列表。 您可以在此處選擇另一個項目,以更改第三個組合框中的選擇。 因此,我使用qtpy作為兩者之間的連接。

真正重要的是:所有三個組合框的連接!

一切正常,直到您第二次更改第一個組合框為止(在始終更改secound和第三個組合框的同時,一切正常)

我的目標是盡可能多地根據第一個組合框(和secound)更改所有三個組合框的值。

這是我的代碼:

    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(" ")

錯誤在這一行:

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

如果使用addItems,則需要提供列表,並且要提供字符串

您可以通過兩種方式做到這一點:

1.使用addItem

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

    self.dlg.type3CB.addItem(" ")

2.使用addItems

addItems(const QStringList&texts)

    self.dlg.type3CB.addItems([" "])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM