evil_inside evil_inside - 2 months ago 16
Python Question

In pyqt how do I add items in a combobox?

I need some help adding some items to a

combBox
.So,I have two comboboxes,one
combobox
populates the other depending on the item selected.

My question is that,using
additem
for new items,it works,but if i choose another option for the
combobox
, it adds the new items but the previous items are gone,and there are blank items below the new ones.

I thought each time i choose a new option from the first
combobox
,to clear the contents of the second
combobox
,i used the
clear()
on the second,but it didn't work.

That's how I thought of it :

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


The above is part of a function that executes when the first
combobox
changes.

Answer

Assuming list1 is a list of strings, then you can simply add them all at once using the addItems method:

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

Note that you are probably using QApplication.translate in the wrong way in your example. If you want to make it possible for the strings in list1 to be translated into a different language, you should do that when you create the the list, and use string literals.

For example:

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

Also note that the _fromUtf8 function is only really useful if you're using string literals containing non-ascii characters in your code - otherwise, it's basically a no-op.

EDIT

If your list contains, say, tuples of pixmaps and text, then you can use something like this:

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