29

我需要一些帮助,将一些项目添加到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更改时执行的函数的一部分。

4

3 回答 3

51

假设是一个字符串列表,那么您可以使用addItems方法list1一次简单地添加它们:

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)
于 2011-12-08T00:38:13.420 回答
4

这里有一些简单易读的演示/示例 https://github.com/shuge/Enjoy-Qt-Python-Binding

克隆它,您将找到有关如何使用基本QComboBox和自定义其图标项的演示。

于 2011-12-11T02:12:26.513 回答
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()

我希望它会在未来对某人有所帮助。

于 2020-03-20T11:08:31.723 回答