如何制作动态组合框PYQT5

问题描述 投票:0回答:1

我想制作一个动态组合框,如果我在下一个组合框中选择选项“ Gasto”,我想查看例如“ Agua”,“ Gas”等;如果选择“ Financas”,则只有“ Fundos de 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",]
combobox pyqt5
1个回答
0
投票

您必须创建树型模型,其中第n个QComboBox的选定项是第(n + 1)个QComboBox的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_())
© www.soinside.com 2019 - 2024. All rights reserved.