Pregunta

Quiero recuperar una lista de los nombres de las personas de una cola y, para cada persona, colocar una casilla de verificación con su nombre en un QGridLayout utilizando la función addWidget (). Puedo colocar con éxito los elementos en un QListView, pero simplemente escriben uno encima del otro en lugar de crear una nueva fila. ¿Alguien tiene alguna idea sobre cómo podría solucionar esto?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

self.jobQueue.getPeopleOffQueue () devolvería algo como ['Bob', 'Sally', 'Jimmy'] si eso ayuda.

¿Fue útil?

Solución

Esta línea:

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

No agrega la casilla de verificación a la vista de lista, solo la crea con la vista de lista como principal, y hay una gran diferencia.

La forma más sencilla de usar una vista de lista es la clase de conveniencia QListWidget . Para eso, cree sus casillas de verificación como instancias de QListWidgetItem y luego use addItem en el widget de la lista para agregarlas realmente.

¿Tuvo problemas para agregarlos a un diseño de cuadrícula? Por lo general, si la cantidad de casillas de verificación que tiene es pequeña, un diseño de cuadrícula podría ser mejor; todo depende de cómo desee que se vea su aplicación. Pero si puede tener muchos de estos objetos, entonces un widget / vista de lista es lo mejor.

Otros consejos

No puedo decirle la solución en PyQt, pero la estructura que debe seguir es la siguiente. QListView puede hacer lo que necesita, no necesita crear casillas de verificación separadas. Cree una subclase de QAbstractItemModel o QStandardItemModel (dependiendo de la cantidad de codificación que desee hacer) anule el < code> flags () método para devolver las banderas apropiadas incluyendo Qt :: ItemIsUserCheckable , en el método columncount () agregue una columna adicional para incluir la casilla de verificación y en el data método para la columna donde desea que aparezca su casilla de verificación devolver el estado marcado Qt :: Checked , Qt :: Unchecked para el Qt :: CheckStateRole .

Esto también se puede lograr utilizando el QListWidget donde puede usar QListWidgetItem para agregar datos y no Necesito crear un modelo. En QListWidgetItem puede usar setFlags () y setData (QVariant (bool, Qt :: CheckStateRole) sin tener que subclasificar un modelo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top