В pyqt как добавить элементы в combobox?

мне нужна помощь в добавлении некоторых элементов в combBox.Итак, у меня есть два comboboxes, один 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 изменения.

2 ответов


предполагая, что 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, в вашем коде-в противном случае это в основном no-op.

редактировать

если ваш список содержит, скажем, кортежи pixmaps и текста, то вы можете использовать что-то вроде этого:

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

здесь есть несколько простых и удобных для чтения демонстраций / примеров https://github.com/shuge/Enjoy-Qt-Python-Binding ,

клонировать его и вы найдете демо о том, как использовать основные QComboBox и пользовательский его значок.