Как сделать выпуклый ящик 1000 * PYQT5 - PullRequest
2 голосов
/ 27 января 2020

Я хочу создать динамический комбобокс c, если я выберу опцию "Гасто" в следующем комбинированном окне, я хочу увидеть, например, "Агуа", "Газ" и т. Д. c, и если, выберите " Financas ", есть только" Fundos de tesouraria "и" Fundos de investimento de 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",]

1 Ответ

3 голосов
/ 27 января 2020

Необходимо создать модель типа дерева, в которой выбранный элемент n-го QComboBox является rootModelIndex (n + 1) -го QComboBox:

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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...