Python PyQT4 - Добавление неизвестного количества виджетов QComboBox в QGridLayout

StackOverflow https://stackoverflow.com/questions/1647664

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top