Question

Je souhaite récupérer une liste de noms de personnes dans une file d'attente et, pour chaque personne, placer une case à cocher avec son nom dans QGridLayout à l'aide de la fonction addWidget (). Je peux placer avec succès les éléments dans un QListView, mais ils écrivent simplement les uns sur les autres au lieu de créer une nouvelle ligne. Quelqu'un a-t-il des idées sur la façon dont je pourrais résoudre ce problème?

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

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

self.jobQueue.getPeopleOffQueue () retournera quelque chose comme ['Bob', 'Sally', 'Jimmy'] si cela vous aide.

Était-ce utile?

La solution

Cette ligne:

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

N'ajoute pas la case à cocher à la vue liste, il la crée uniquement avec la vue liste en tant que parent et il y a une grande différence.

Le moyen le plus simple d'utiliser une vue liste est la classe de commodité QListWidget . Pour cela, créez vos cases à cocher en tant qu'instances de QListWidgetItem , puis utilisez addItem sur le widget de liste pour les y ajouter.

Avez-vous eu du mal à les ajouter à une grille? Habituellement, si le nombre de cases à cocher que vous avez est faible, la disposition de la grille pourrait être meilleure - tout dépend de l'apparence que vous souhaitez donner à votre application. Mais si vous avez beaucoup de tels objets, alors un widget / vue de liste est le meilleur.

Autres conseils

Je ne peux pas vous dire la solution dans PyQt mais la structure que vous devez suivre est la suivante. QListView peut faire ce dont vous avez besoin, vous n'avez pas besoin de créer des cases à cocher séparées. Créez une sous-classe de QAbstractItemModel ou QStandardItemModel (en fonction de la quantité de codage que vous souhaitez effectuer), remplacez le < code> flags () méthode pour renvoyer les drapeaux appropriés , y compris Qt :: ItemIsUserCheckable , dans la méthode columncount () , ajoutez une colonne supplémentaire pour inclure la case à cocher et dans la data < La méthode / code> de la colonne dans laquelle vous voulez que votre case à cocher apparaisse renvoie l'état coché Qt :: Checked , Qt :: Unchecked pour le Qt :: CheckStateRole .

Cela peut également être réalisé à l'aide du QListWidget . où vous pouvez utiliser QListWidgetItem pour ajouter des données et ne pas le faire besoin de créer un modèle. Sur QListWidgetItem , vous pouvez utiliser setFlags () et setData (QVariant (bool, Qt :: CheckStateRole) sans devoir sous-classer un modèle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top