Python PyQT4 - Добавление неизвестного количества виджетов QComboBox в QGridLayout
Вопрос
Я хочу получить список имен людей из очереди и для каждого человека установить флажок с их именем в QGridLayout с помощью функции addWidget (). Я могу успешно поместить элементы в QListView, но они просто пишут поверх друг друга, а не создают новую строку. У кого-нибудь есть мысли о том, как я могу это исправить?
self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()
for item in items:
QtGui.QCheckBox('%s' % item, self.chk_People)
self.jobQueue.getPeopleOffQueue () вернет что-то вроде ['Bob', 'Sally', 'Jimmy'], если это поможет.
Решение
Эта строка:
QtGui.QCheckBox('%s' % item, self.chk_People)
Не добавляет флажок к представлению списка, он только создает его с представлением списка в качестве родительского, и есть большая разница. Р>
Простейшим способом использования представления списка является вспомогательный класс QListWidget
. Для этого создайте свои флажки как экземпляры QListWidgetItem
, а затем используйте addItem
в виджете списка, чтобы действительно добавить их в него.
У вас были проблемы с добавлением их в сетку? Обычно, если количество чекбоксов у вас мало, может быть лучше макет сетки - все зависит от того, как вы хотите, чтобы ваше приложение выглядело. Но если у вас может быть много таких объектов, тогда виджет / представление списка будет лучшим.
Другие советы
Я не могу сказать вам решение в PyQt, но структура, которой вы должны следовать, следующая. QListView может делать то, что вам нужно, вам не нужно создавать отдельные флажки. Создайте подкласс Это также можно сделать с помощью QAbstractItemModel
или QStandardItemModel
(в зависимости от того, сколько кода вы хотите сделать) переопределяют < Метод code> flags () для возврата соответствующих флагов , включая Qt :: ItemIsUserCheckable
, в методе columncount ()
добавьте дополнительный столбец для включения флажка и в data < Метод / code> для столбца, в котором вы хотите, чтобы ваш флажок появлялся, возвращает проверенное состояние
Qt :: Checked
, Qt :: Unchecked
для Qt :: CheckStateRole код>. Р>
QListWidget
где вы можете использовать QListWidgetItem
для добавления данных, но не нужно создать модель. В QListWidgetItem
вы можете использовать setFlags ()
и setData (QVariant (bool, Qt :: CheckStateRole)
без необходимости создавать подкласс модели