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

Мне нужна помощь в добавлении некоторых элементов в 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.

Ответы

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

ИЗМЕНИТЬ

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

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

Ответ 2

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

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