首页 > 解决方案 > 如何实时连接两个 QCombobox

问题描述

我正在研究 PyQt5 ui 框架。如何实时连接两个 QCombobox,以便 QCombobox 2 根据 QCombobox1 中的文本加载数据。

标签: python-3.xpyqt5qcombobox

解决方案


这是一个非常小的例子。textChanged通过将插槽连接到第一个组合框的信号来更改第二个组合框中的项目。我使用字典来查找应在第二个组合框中显示哪些项目,具体取决于第一个组合框中的当前文本。

from PyQt5.QtWidgets import QWidget, QApplication, QComboBox, QFormLayout

class Widget(QWidget):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.categories = {'animals':['cat', 'dog', 'parrot', 'fish'],
                           'flowers':['daisies', 'tulips', 'daffodils', 'roses'],
                           'colors':['red', 'orange', 'blue', 'purple']}
        self.cat_combobox = QComboBox(self)
        self.item_combobox = QComboBox(self)

        self.cat_combobox.setEditable(False)
        self.item_combobox.setEditable(False)

        self.cat_combobox.currentTextChanged.connect(self.set_category)
        self.cat_combobox.addItems(sorted(self.categories.keys()))

        form_layout = QFormLayout(self)
        form_layout.addRow('Category', self.cat_combobox)
        form_layout.addRow('Items', self.item_combobox)

    def set_category(self, text):
        self.item_combobox.clear()
        self.item_combobox.addItems(self.categories.get(text, []))

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = Widget()
    window.show()
    app.exec()

推荐阅读