2010-04-05 2 views
1

J'essaie de créer une liste d'éléments de case à cocher qui modifient le statut lors de l'activation. Je peux connecter le signal d'activation et tout semble fonctionner, mais change à l'écran. Est-ce que je manque des étapes ici?Définition de checkstate sur un ListWidgetItem

est ici la création de la liste:

self.listField = QtGui.QListWidget(self) 

muted_categories = qb.settingsCollection['mutedCategories'].split('|') 
main_categories = sorted(set(qb.categoryTopNames.values())) 

for category in main_categories: 
    item = QtGui.QListWidgetItem(category, self.listField) 
    item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) 
    if category in muted_categories: 
     item.setCheckState(QtCore.Qt.Checked) 
    else: 
     item.setCheckState(QtCore.Qt.Unchecked) 

self.listField.connect(self.listField, QtCore.SIGNAL('itemActivated(QListWidgetItem*)'), self.doItemChangeState) 

et voici le gestionnaire:

def doItemChangeState(self, item): 
    """ invert the state of the activated item """ 

    if item.checkState() == QtCore.Qt.Checked: 
     item.setCheckState(QtCore.Qt.Unchecked) 
    else: 
     item.setCheckState(QtCore.Qt.Checked) 

J'ai vérifié que le gestionnaire est tiré après avoir cliqué sur - si je mets des impressions là, il alterne « vérifié »/"non coché". Que puis-je faire pour actualiser les cases à cocher elles-mêmes? Edit: essayé d'appeler update() et d'émettre les signaux itemChanged ... pas de chance jusqu'à maintenant.

Répondre

2

Je ne peux pas le tester tout de suite, mais ... j'avais l'impression que PyQt4 traitait automatiquement les mises à jour de l'écran lorsque les éléments étaient cochés/décochés (du moins pour les éléments QCheckBox). Il ressemble à moi comme votre gestionnaire d'événements est en train de défaire l'action de l'utilisateur. Avez-vous essayé de commenter la ligne self.connect et de la relancer? Si je comprends bien, setCheckState() est vraiment destiné à définir l'état par défaut de chaque élément ...

Questions connexes