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

Posted

技术标签:

【中文标题】如何在 PyQt/PySide 中将项目添加到 QComboBox【英文标题】:How to add items to a QComboBox in PyQt/PySide 【发布时间】:2011-12-07 19:53:05 【问题描述】:

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

【问题讨论】:

【参考方案1】:

假设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)

【讨论】:

谢谢,它起作用了。我的 for 循环会起作用,不管是否有其他方法?我打算在列表中为每个字符串放置一些图标,这就是我想到循环的原因。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我必须使用文本文件中的名称填充组合框

代码如下:

    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()

希望以后能对大家有所帮助。

【讨论】:

以上是关于如何在 PyQt/PySide 中将项目添加到 QComboBox的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt/PyQt/PySide 中找到当前的 QLocale?

如何使用 PyQt/PySide 获取与特定文件类型关联的图标?

如何在 PyQt5 / PySide2 中从一个类访问属性到另一个类

如何对项目的复选框和文本以不同的方式处理点击事件? (PyQt/PySide/Qt)

使用 PyQt/PySide 禁用 QTableWidget 中特定列中的排序箭头

如何在 PyQt/PySide 中获取 QPalette 的组和角色?