📌  相关文章
📜  PyQt5 ComboBox - 用户输入的项目未存储在下拉菜单中(1)

📅  最后修改于: 2023-12-03 15:18:47.364000             🧑  作者: Mango

PyQt5 ComboBox - 用户输入的项目未存储在下拉菜单中

当我们使用PyQt5中的ComboBox时,下拉菜单通常是通过预定义的项目列表来填充的。但是有时用户可能会输入新的项目,这些项目并不在预定义的列表中,这就需要我们动态添加项目到ComboBox中。

解决方案

在PyQt5中,我们可以通过addItem()方法将用户输入的项目添加到ComboBox中。我们还可以通过setEditable()方法将ComboBox设置为可编辑,让用户输入新的项目。下面是一个简单的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QVBoxLayout

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # 创建ComboBox控件
        self.cb = QComboBox(self)
        self.cb.setEditable(True) # 设置可编辑

        # 添加预定义的项目到ComboBox中
        self.cb.addItem('Apple')
        self.cb.addItem('Banana')
        self.cb.addItem('Cherry')

        # ComboBox的选择改变时调用onActivated方法
        self.cb.activated[str].connect(self.onActivated)

        # 创建垂直布局并添加ComboBox控件
        vbox = QVBoxLayout()
        vbox.addWidget(self.cb)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('ComboBox')
        self.show()

    def onActivated(self, text):
        # ComboBox的选择项改变时调用该方法
        if text not in [self.cb.itemText(i) for i in range(self.cb.count())]:
            # 如果选择的项不在预定义的项目中
            self.cb.addItem(text) # 添加到ComboBox中

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
解释说明

在示例代码中,我们先创建了一个ComboBox控件,并设置为可编辑。接着,我们将预定义的项目'Apple'、'Banana'和'Cherry'添加到ComboBox中。

当ComboBox的选择改变时,我们调用了onActivated()方法。该方法判断用户选择的项是否已经在ComboBox中存在。如果该项不存在,则调用addItem()方法将该项添加到ComboBox中。

最后,我们将ComboBox添加到垂直布局中。在实际应用中,我们可以通过其他布局方式将ComboBox添加到我们需要的位置。

当我们运行程序时,ComboBox下拉菜单中会显示预定义的项目,如下图所示:

ComboBox1

如果我们在ComboBox中输入一个新的项目,比如'Orange',当我们按下回车键时,ComboBox下拉菜单中会添加该项目:

ComboBox2

总结

在PyQt5中,我们可以通过addItem()方法将用户输入的项目添加到ComboBox中,从而实现动态添加项目的功能。同时,我们还可以通过setEditable()方法将ComboBox设置为可编辑,让用户输入新的项目。对于ComboBox的事件处理,我们可以通过signal-slot机制来实现。