如何在PyQt/PySide中向QComboBox添加项目
我需要一些帮助,想在一个 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)