【问题标题】:How to add items to a QComboBox in PyQt/PySide如何在 PyQt/PySide 中将项目添加到 QComboBox
【发布时间】:2012-01-15 08:03:59
【问题描述】:

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

【问题讨论】:

    标签: python pyqt pyqt5 pyside qcombobox


    【解决方案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()
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 2021-05-20
        • 2014-05-18
        相关资源
        最近更新 更多