В pyqt, как добавить элементы в выпадающий список? - PullRequest
19 голосов
/ 07 декабря 2011

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

Ответы [ 2 ]

35 голосов
/ 08 декабря 2011

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

РЕДАКТИРОВАТЬ

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

self.comboBox_2.clear()
for pixmap, text in list1:
    self.comboBox_2.addItem(QIcon(pixmap), text)
4 голосов
/ 11 декабря 2011

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

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

...