В 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
и настраивать его значок.