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