Gestion du clique sur le ListView
Exclusif Premium
Débloquez votre potentiel ! ✨
Cette session fait partie de notre programme Premium exclusif
+100h de formations exclusives
+180 exercices de code avancés
+100h de mentorats en réécriture
20 projets guidés pas à pas
Mentorats groupés hebdomadaires
Support individuel avec nos mentors
Prêt à passer au niveau supérieur ?
Découvrez tous les avantages Premium et transformez votre apprentissage dès aujourd'hui!
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compteToutes les questions

Simon
27 mai 2024
Résolue
2 réponses
Pourquoi passer par le selectionModel?
Bonjour, dans la vidéo, le script proposé de la fonction est le suivant:
```python
def list_view_clicked(self, index: QModelIndex):
"""Updates tree view when list is clicked"""
selection_model = self.tree_view.selectionModel()
selection_model.setCurrentIndex(index, QtCore.QItemSelectionModel.ClearAndSelect)
```
Pourquoi ne pas faire tout simplement ceci pour arriver au même résultat?
```python
def list_view_clicked(self, index: QModelIndex):
"""Updates tree view when list is clicked"""
self.tree_view.setCurrentIndex(index)
```
Merci d'avance!
00:00:00 :Dans cette partie, on va donc s'attaquer au clic sur le ListView.Dans ma méthode SetupConnections, je vais connecter sur mon ListView le signal CLICKEDet on va le connecter à une méthode que l'on va appeler ListViewClicked,comme on l'a fait pour TreeView, sauf que cette fois-ci, on l'appelle ListViewClicked.
00:00:17 :On va la créer ici, tout en bas, et on va également récupérer dans cette méthode l'index.C'est l'index de l'item sur lequel on est en train de cliquer.
00:00:25 :Donc pour l'instant, si je fais juste un print de index,vous allez voir qu'on va se retrouver avec, comme dans le cas du TreeView, un QModelIndex.
00:00:32 :Donc vous voyez ici QModelIndex.Et ce QModelIndex, on va pouvoir s'en servir pour changer la sélection, cette fois-ci, de notre TreeView.Puisque là, dans ce cas-ci, on ne veut pas afficher dans notre TreeView le contenu de notre dossier User.
00:00:45 :On veut laisser notre TreeView comme il est actuellement.Mais par contre, on aimerait bien le sélectionner pour avoir une synchronisation entre les deux.C'est-à-dire que quand je sélectionne quelque chose dans mon ListView ici,la sélection se fait également dans le TreeView pour que je puisse m'y retrouver.
00:00:58 :Donc pour ça, on va aller chercher ce qu'on appelle le SelectionModel, cette fois-ci, de notre TreeWidget.Donc ça, on va y accéder avec notre attribut TreeView ici, qui correspond à notre TreeView.
00:01:09 :Et on va aller chercher le SelectionModel, cette fois-ci,qui va nous permettre de récupérer ce SelectionModel,et on va pouvoir changer à lui aussi son index.
00:01:18 :Donc on va dire SetCurrentIndex, et on va lui passer tout simplement l'index qui est récupéré par le paramètre ici.Il va falloir lui donner également un deuxième argument,qui va être en fait une constante qui va nous permettre de définir le mode de sélection.
00:01:31 :Puisque par défaut, si on ne met rien, on aura une erreur.Et si on met d'autres modes de sélection, on pourra avoir des modes de sélection qui vont être, par exemple, cumulatifs.
00:01:39 :C'est-à-dire qu'à chaque fois qu'on clique sur quelque chose,il ne va pas désélectionner les éléments qui étaient déjà sélectionnés au préalable,et donc on va avoir une accumulation comme ça d'éléments sélectionnés.
00:01:48 :Nous, ce qu'on veut, c'est qu'à chaque fois qu'on clique sur quelque chose,ça désélectionne tout ce qui était sélectionné,et ça ne nous sélectionne que l'élément qui est sélectionné dans le ListView.
00:01:56 :Donc pour ça, on va aller chercher dans QtCore, le QItemSelectionModel,et on va aller chercher la constante ClearAndSelect.Puisqu'on ne veut pas juste faire un Clear, on veut faire un Clear,et ensuite sélectionner ce qui est spécifié ici dans le QModelIndex.
00:02:12 :Donc ça fait une longue ligne de code, on pourrait la séparer un petit peu si on voulait,pour avoir déjà le SelectionModel et ensuite faire un SetCurrentIndex.
00:02:19 :sur ce SelectionModel, donc par exemple comme ceci,si on voulait que ce soit un petit peu plus clair.Voilà, donc là on a deux lignes, et c'est peut-être un peu plus clair,et ça fait moins de longueur dans notre deuxième ligne ici,puisque cette constante prend quand même pas mal de place.
00:02:35 :Donc on va tester ça, on lance notre script,si je sélectionne quelque chose ici, vous voyez qu'automatiquement maintenant,notre SelectionModel change, et on a la sélection qui se fait sur notre TreeView.
00:02:46 :Donc si je vais à l'intérieur ici, je clique sur mon TreeView,donc sur le dossier User, et si je clique sur un dossier ici dans mon ListView,automatiquement il va se retrouver sélectionné dans le TreeView.
00:02:57 :Donc c'est tout bon pour le ListViewClicked, ça fonctionne,et maintenant on va faire le double clic sur le ListView,puisque pour l'instant si on double clique sur un dossier ici, il ne se passe rien,et moi j'aimerais bien faire en sorte que quand on double clique sur un dossier dans le ListView,
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.