在pyqt中如何在组合框中添加项目?

时间:2011-12-07 19:53:05

标签: python pyqt pyqt4 qcombobox

我需要一些帮助,将一些项目添加到combBox。因此,我有两个组合框,一个combobox填充另一个,具体取决于所选项目。

我的问题是,使用additem新项目,它可以工作,但如果我为combobox选择另一个选项,它会添加新项目,但之前的项目已经消失,并且有新邮件下面的空白项目。

我想每次我从第一个combobox中选择一个新选项,要清除第二个combobox的内容,我在第二个时使用了clear(),但它没有'工作。

这就是我的想法:

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

以上是在第一次combobox更改时执行的函数的一部分。

3 个答案:

答案 0 :(得分:35)

假设list1是一个字符串列表,那么您只需使用addItems方法一次性添加所有字符串:

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

请注意,您可能在示例中以错误的方式使用QApplication.translate。如果您希望将list1中的字符串翻译成其他语言,则应在创建列表时执行此操作,并使用字符串文字< / em>的

例如:

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

另请注意,如果您在代码中使用包含非ascii字符的字符串文字,_fromUtf8函数才真正有用 - 否则,它基本上是无操作。

修改

如果您的列表包含像素图和文本的元组,那么您可以使用以下内容:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

我必须使用文本文件中的名称填充comboBox

这是代码:

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

我希望它将来能对某人有所帮助。