如何在PyQt/PySide中向QComboBox添加项目

30 投票
3 回答
83575 浏览
提问于 2025-04-17 07:55

我需要一些帮助,想在一个 QComboBox 中添加一些项目。我有两个下拉框,一个下拉框的内容会根据另一个下拉框选择的项目来填充。

我的问题是,当我使用 additem 添加新项目时,这个方法是有效的。但是如果我选择了第一个下拉框中的另一个选项,新的项目会被添加进来,但之前的项目却消失了,而且新项目下面还出现了空白的选项。

我原本以为每次从第一个下拉框选择新选项时,应该先清空第二个下拉框的内容。所以我在第二个下拉框上使用了 clear(),但这并没有起作用。

这就是我想到的做法:

self.comboBox_2.clear()
for index,i in enumerate(list1):
  self.comboBox_2.addItem(_fromUtf8(""))
  self.comboBox_2.setItemText(index+2, QApplication.translate("Dialog", i, None, QApplication.UnicodeUTF8))

上面的代码是当第一个 combobox 发生变化时执行的一部分函数。

3 个回答

0

我需要用文本文件里的名字来填充下拉框

这是代码:

    names = self.classes_names()
    self.comboBox.addItems(names)

    def classes_names(self):
        coconames = CURRENT_DIR + os.sep + 'yolo-coco' + os.sep + 'coco.names'
        with open(coconames) as reader:
            return reader.readlines()

希望这能在未来帮助到某个人。

4

这里有一些简单易懂的示例和演示,

你可以访问这个链接:https://github.com/shuge/Enjoy-Qt-Python-Binding

把它克隆下来,你会找到一个关于如何使用基本的 QComboBox 以及如何自定义它的图标项的演示。

54

假设 list1 是一个字符串的列表,你可以通过 addItems 方法一次性把它们全部添加进去:

self.comboBox_2.clear()
self.comboBox_2.addItems(list1)

注意,你在例子中可能错误地使用了 QApplication.translate。如果你想让 list1 中的字符串可以翻译成其他语言,你应该在 创建 列表的时候就处理这个问题,并使用 字符串字面量

比如:

list1 = [
    self.tr('First Item'),
    self.tr('Second Item'),
    self.tr('Third Item'),
    ]

还要注意,_fromUtf8 函数只有在你的代码中使用了包含非ASCII字符的字符串字面量时才有用——否则,它基本上是个无操作。

编辑

如果你的列表里包含了像是图像和文本的元组,那么你可以用类似这样的方式:

self.comboBox_2.clear()
for pixmap, text in list1:
    self.comboBox_2.addItem(QIcon(pixmap), text)

撰写回答