- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Un des éléments essentiels de l'interface graphique, c'est ce qu'on appelle les signaux.Les signaux, c'est ce qui va nous permettre de connecter des événements et d'avoir desactions qui sont effectuées en fonction de ces événements.
00:00:11 :Le signal par excellence, par exemple, c'est le clic sur un bouton.Donc quand on clique sur un bouton, on souhaite effectuer une certaine action.On a plein d'événements comme ça et de signaux qui peuvent être activés.
00:00:22 :Par exemple, sur un bouton, ça peut être le clic mais ça peut être également l'appuisur le bouton ou le relâchement.Donc on peut avoir différents signaux en fonction de quand on appuie et qu'on laisseappuyer sur le bouton et quand on relâche le clic.
00:00:35 :Et on peut avoir également un événement qui est donc le clic en tant que tel.On peut avoir d'autres événements, par exemple, sur des line-edits, donc le queue-line-editqui est la boîte de texte.
00:00:43 :On pourrait avoir, par exemple, un événement qui sera déclenché quand on va taper dutexte, quand on va effacer le texte, etc.Malheureusement, l'autocomplétion de PySide, que ce soit sur Visual Studio Code ou PyCharm,ne permet pas d'avoir accès à ces signaux.
00:00:57 :Donc c'est un bug qui est connu depuis de nombreuses années.Dans la façon dont est fait PySide, en fait, on n'a pas ces connexions qui sont affichéesdans l'autocomplétion.
00:01:05 :Donc là encore, il va falloir aller fouiller un petit peu dans la documentation pour voirqu'est-ce qu'il est possible de faire avec les différents widgets.
00:01:12 :Par exemple, si je veux aller voir les signaux qui sont disponibles sur le QPushButton, jepeux aller voir la page de QPushButton et là vous allez voir qu'il y a encore des petitessubtilités puisque si je vais voir QPushButton, vous voyez qu'il n'y a pas les signaux dontje vous ai parlé, notamment le signal CLICKED ou encore le signal PRESSED et RELEASED qui
00:01:28 :correspondent à la pression sur le bouton et au relâchement du clic sur le bouton.Donc là encore, il va falloir remonter un petit peu dans l'arborescence puisque ce signalde clic est commun à tous les types de boutons.
00:01:38 :Donc là encore, on va remonter dans la hiérarchie pour aller voir dans le QAbstractButton sices signaux sont à l'intérieur du AbstractButton.Donc je reviens ici sur la page, je cherche le QAbstractButton et vous allez voir cettefois-ci sur la page de QAbstractButton qu'on retrouve bien donc le CLICKED qui est le
00:01:54 :signal quand on clique sur le bouton et également PRESSED et RELEASED qui sont les deux signauxqui vont nous permettre de savoir quand est-ce qu'on a cliqué, quand est-ce qu'on a relâchéle clic.
00:02:03 :Donc là encore, il faut un petit peu fouiller dans la documentation.Là encore, ne vous en faites pas.Sur les widgets qu'on utilise, il y a généralement un ou deux signaux qui nous intéressent doncc'est assez rapide à apprendre.
00:02:13 :En regardant quelques formations et en vous aidant de la documentation, vous allez rapidementvoir les différents signaux dont vous allez avoir besoin.Donc moi, je vais faire le signal CLICKED sur un PushButton.
00:02:23 :Donc je vais créer un bouton à l'intérieur de mon interface.Je vais mettre ici CLICKME sur le bouton et je vais l'ajouter dans mon layout donc avecADDWIDGET pour ajouter le bouton dans mon HBoxLayout ici.
00:02:37 :Donc si je lance l'interface pour l'instant, j'ai juste un bouton et quand je clique surle bouton, il ne se passe rien et on va voir comment connecter cette fois-ci ce boutonà une méthode à l'intérieur de ma classe.
00:02:48 :Donc pour connecter un signal, on va faire bouton, ensuite on va faire le nom du signaldonc dans ce cas-ci CLICKED et on va utiliser la méthode CONNECT.
00:02:57 :Donc vous avez le widget, ensuite vous avez le nom du signal qui dans ce cas-ci est CLICKED.C'est vraiment le nom du signal ici CLICKED.
00:03:04 :Si je voulais connecter PRESSED ou RELEASED, il faudrait changer ici CLICKED pour mettrePRESSED par exemple et c'est là où comme je vous disais, on n'a pas l'autocomplétion.
00:03:12 :Donc si je commence à taper PRESSED, vous voyez qu'on n'a pas la complétion de PRESSEDdonc c'est pour ça qu'il faut aller chercher dans la documentation, vous n'aurez pas l'autocomplétiondes signaux que ce soit dans Visual Studio Code ou dans Python.
00:03:24 :Donc je vais moi mettre le CLICKED et on va connecter le CLICK à quelque chose.Donc je vais le connecter à une méthode que je vais créer, je vais l'appeler par exemplebouton CLICKED.
00:03:33 :On n'oublie pas le self puisqu'on est à l'intérieur d'une classe et dans cette méthode, je vaistout simplement un print dans lequel je vais dire le bouton a bien été cliqué.
00:03:41 :Tout simplement et on va connecter cette méthode en la mettant à l'intérieur des parenthèsesici.Donc on va dire self.boutonCLICKED.Attention de ne pas mettre les parenthèses ici puisque nous ce qu'on veut ce n'est pasappeler cette méthode ici, on veut juste la connecter.
00:03:54 :On veut juste dire que quand on va cliquer sur le bouton, on souhaite appeler cette méthodeici.Donc bien faire attention ici de ne pas mettre les parenthèses pour ne pas appeler la fonction.
00:04:03 :Si je lance donc mon script et que je clique sur le bouton, vous allez voir que cette fois-cion a bien le print qui se fait dans le terminal ici.
00:04:11 :Donc voilà c'est pas plus compliqué que ça pour connecter un signal à une méthode.On met le nom du signal .connect et ensuite on dit à quoi on souhaite le connecter.
00:04:20 :Et juste pour vous montrer, je vais mettre à la place de CLICK PRESSED et je vais faireun autre signal puisqu'on peut connecter plusieurs signal bien entendu sur le mêmewidget.
00:04:29 :Donc je vais mettre PRESSED et RELEASED et on va créer deux fonctions différentes ici.Donc on va faire une première fonction qui va être bouton PRESSED et une deuxième méthodeici qui va être bouton RELEASED.
00:04:39 :Et on va modifier le texte, on va dire PRESSER et RELÂCHER.Et je vais connecter ici donc bouton PRESSED et bouton RELEASED.Tout simplement.Donc quand on va appuyer sur le bouton et maintenir le clic enfoncé, ça va affichercette phrase et quand on va relâcher le clic, on va afficher cette phrase.
00:04:57 :Donc on va tester tout ça, je lance le script, je clique sur le bouton et je maintiens leclic enfoncé.Donc on a bien le bouton a bien été pressé qui est affiché et quand je relâche le clic,on a bien le bouton a été relâché.
00:05:09 :Donc vous voyez qu'on peut vraiment aller très loin avec ces signaux qui nous sontproposés par Qt.Si je retourne voir dans la documentation, vous allez voir que parfois certaines informationssont envoyées avec les signaux.
00:05:20 :Par exemple avec CLICKED ici, on voit que entre parenthèses, on a CHECKED qui estégal à FALSE.Si je vais voir sur PRESSED et RELEASED, par contre je n'ai rien qui est envoyé.
00:05:29 :Donc quand on va connecter le CLICKED, on va avoir des informations qui vont être envoyéesavec le signal.Donc je vais enlever le PRESSED et le RELEASED, je vais revenir sur le CLICKED.
00:05:37 :Donc je vais connecter le CLICKED ici à cette méthode que je vais renommer bouton CLICKEDet on va la mettre ici.Donc quand on va connecter ce signal CLICKED, on va pouvoir récupérer ce qui est envoyépar ce signal dans un paramètre de notre méthode.
00:05:51 :Donc ici je vais créer un paramètre, je vais l'appeler CHECKED, on pourrait l'appelerMETRIC ou n'importe quoi, ça n'a pas d'importance.C'est vraiment juste un paramètre qui va nous permettre de récupérer ce qui a étéenvoyé avec le signal.
00:06:01 :Donc pour l'instant je vais juste faire un print de ce CHECKED et vous allez voir ceque ça donne.Donc je lance mon interface ici, je clique dessus et là vous voyez que pour l'instanton a juste FALSE qui est affiché.
00:06:11 :Donc c'est normal puisque ce bouton pour l'instant ne peut pas être COCHÉ, il ne peut pas êtreCHECKED.Donc ce qu'on va faire c'est qu'on va modifier notre bouton et on va dire que ce bouton peutêtre COCHABLE.
00:06:21 :Donc pour ça on va dire SET CHECKABLE et on va passer à TRUE.Donc on va dire que ce bouton on peut cliquer dessus et le cocher.
00:06:28 :Donc je lance le script et vous allez voir ce que je veux dire par là, c'est à direque si je clique sur le bouton vous voyez que maintenant il est en surbrillance et sije reclique dessus il ne l'est plus.
00:06:37 :Et vous voyez qu'ainsi quand je fais le print de CHECKED ici, et bien quand le bouton estCOCHÉ on a bien TRUE qui est affiché et quand je clique une deuxième fois pour décocherle bouton on a FALSE qui est affiché.
00:06:47 :Donc ça montre bien qu'avec ce signal CLICKED on a des informations qui sont envoyées.Dans ce cas-ci le CHECKED qui nous permet d'avoir des informations supplémentaires avecle signal.
00:06:56 :Donc c'est très pratique puisqu'on pourrait par exemple modifier le texte du bouton.Par défaut ici je pourrais dire que le bouton est décoché et en fonction du CHECKED icichanger le texte du bouton.
00:07:07 :Donc je pourrais dire IF CHECKED on va dire BOUTON.SETTEXT et on va dire COCHÉ.Et si ce n'est pas le cas, donc si on n'a pas CHECKED qui est égal à TRUE, on va toutsimplement remettre le texte décoché.
00:07:20 :Et là vous voyez qu'on a un avertissement, c'est normal puisque là on a une variablequi n'est pas attachée à SELF donc qui n'est pas attachée à notre instance et donc cettevariable BOUTON, notre widget, il n'est pas disponible dans les méthodes de ma classe.
00:07:33 :Donc je vais rajouter le SELF devant le bouton pour qu'il soit attaché à mon instance etça va me permettre d'utiliser ce widget, donc d'utiliser mon bouton dans les différentesméthodes de ma classe.
00:07:44 :Donc vous voyez là l'intérêt de passer par de l'orienté objet puisqu'on a un widgetqui est défini dans la méthode INIT, donc dans cette méthode ici, auquel on va vouloiraccéder et qu'on va vouloir modifier dans différentes méthodes de ma classe.
00:07:57 :Donc je rajoute le SELF, je n'ai plus l'avertissement et on va pouvoir vérifier maintenant quenotre application fonctionne.Donc par défaut le bouton est décoché.
00:08:05 :Si je clique dessus, je rentre donc dans cette méthode ici.On va vérifier si le bouton est coché ou non en récupérant la valeur de check ici.
00:08:13 :Si le bouton est coché, on change le texte et on affiche qu'il est coché, sinon on affichedécoché.Donc si je reclique dessus, on a bien le texte qui est modifié en conséquence.
00:08:22 :Donc ça fonctionne parfaitement et ça me permet donc de vous montrer qu'on a des informationscomme ça qui sont parfois envoyées.Bien sûr les informations vont dépendre du widget et du signal, par exemple si vousavez un line edit ou si vous avez une liste, les informations qui sont envoyées ne seront
00:08:36 :pas les mêmes.Par exemple sur un list widget, on va avoir un signal qui va nous permettre de savoirquand est-ce qu'on a cliqué sur un élément et ce qui va être envoyé avec le signalc'est l'élément sur lequel on a cliqué.
00:08:47 :Donc dans ce cas-ci c'est assez logique mais vraiment il faut à chaque fois allervoir la documentation pour voir s'il y a des informations qui sont envoyées avecle signal et quelles informations sont envoyées pour pouvoir ensuite les récupérer et effectuerdes opérations comme on vient de le faire ici avec ce check.
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.