Python PyQT4 - Добавление неизвестного количества виджетов QComboBox в QGridLayout - PullRequest
0 голосов
/ 30 октября 2009

Я хочу получить список имен людей из очереди и для каждого человека установить флажок с их именем в 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'], если это поможет.

Ответы [ 2 ]

1 голос
/ 30 октября 2009

Эта строка:

QtGui.QCheckBox('%s' % item, self.chk_People)

Не добавляет флажок к представлению списка, он только создает его с представлением списка в качестве родительского, и есть большая разница.

Простейшим способом использования представления списка является вспомогательный класс QListWidget. Для этого создайте свои флажки как экземпляры QListWidgetItem, а затем используйте addItem в виджете списка, чтобы действительно добавить их в него.

У вас были проблемы с добавлением их в сетку? Обычно, если количество чекбоксов у вас мало, может быть лучше макет сетки - все зависит от того, как вы хотите, чтобы ваше приложение выглядело. Но если у вас может быть много таких объектов, тогда виджет / представление списка будет лучшим.

0 голосов
/ 30 октября 2009

Я не могу сказать вам решение в PyQt, но структура, которой вы должны следовать, следующая. QListView может делать то, что вам нужно, вам не нужно создавать отдельные флажки. Создайте подкласс QAbstractItemModel или QStandardItemModel (в зависимости от того, сколько кода вы хотите сделать), переопределите метод flags(), чтобы вернуть соответствующие флаги , включая Qt::ItemIsUserCheckable, в методе columncount() добавьте дополнительный столбец для включения флажка и в методе data для столбца, в котором вы хотите, чтобы ваш флажок появился, возвращают проверенное состояние Qt::Checked, Qt::Unchecked для Qt::CheckStateRole.

Это также может быть выполнено с использованием QListWidget, где вы можете использовать QListWidgetItem для добавления данных и не нужно создавать модель. На QListWidgetItem вы можете использовать setFlags() и setData(QVariant(bool, Qt::CheckStateRole) без необходимости подкласса модели

...