如何制作动态组合框pyqt5

pexxcrt2  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(471)

我想制作一个动态组合框,如果我在下一个组合框中选择“gasto”,我想看到例如“agua”、“gas”等,如果选择“financas”,则只有“tesouraria基金”和“obrigações投资基金”

def initUI(self):
    #self.setWindowTitle(self.title)
    for t in self.tipos:
        self.comboBoxCategoriaGasto.addItem(t)
    for i in self.tipos2:
        self.comboBoxTiposGasto_2.addItem(i)

    self.tipos = ["Gasto", "Finaças"]
    self.tipos2 = ["Alimentação", "Transporte", "Água","Luz","Gás","Internet", "Faculdade", "Depósitos a prazo","Fundos de tesouraria","Fundos de investimento de obrigações","Fundos de investimento de ações",]
7lrncoxx

7lrncoxx1#

您必须创建一个树型模型,其中第n个QCOMBOX的选定项是第(n+1)个QCOMBOX的rootmodelindex:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.model = QtGui.QStandardItemModel(self)

        self.combo1 = QtWidgets.QComboBox()
        self.combo2 = QtWidgets.QComboBox()

        self.combo1.setModel(self.model)
        self.combo2.setModel(self.model)

        d = {
            "Gasto": ["Agua", "Gas"],
            "Financas": [
                "Fundos de tesouraria",
                "Fundos de investimento de obrigações",
            ],
        }

        for key, options in d.items():
            root_it = QtGui.QStandardItem(key)
            self.model.appendRow(root_it)
            for option in options:
                it = QtGui.QStandardItem(option)
                root_it.appendRow(it)

        self.combo1.currentIndexChanged.connect(self.onCurrentIndexChanged)
        self.onCurrentIndexChanged(0)

        hlay = QtWidgets.QHBoxLayout(self)
        hlay.addWidget(self.combo1)
        hlay.addWidget(self.combo2)

    @QtCore.pyqtSlot(int)
    def onCurrentIndexChanged(self, index):
        ix = self.model.index(index, 0, self.combo1.rootModelIndex())
        self.combo2.setRootModelIndex(ix)
        self.combo2.setCurrentIndex(0)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(640, 120)
    w.show()
    sys.exit(app.exec_())

相关问题