- 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 :La base d'une application avec PySight, c'est vraiment tout ce que vous avez ici.Même, je vous dirais, le modify widget n'est pas forcément tout le temps utilisé,puisque comme je l'ai dit dans la partie précédente, c'est souvent pour modifier l'apparence des widgets,donc ce n'est pas forcément obligatoire.
00:00:14 :Par contre, créer des widgets, créer des layouts, ajouter des widgets dans les layouts et faire les connexions,eh bien, on ne peut pas vraiment y échapper.
00:00:21 :Si on veut ajouter un bouton dans notre interface, il va falloir le créer.Si on veut le mettre dans l'interface, il va falloir l'ajouter à l'intérieur d'un layout.
00:00:29 :Si on veut ensuite que notre bouton fasse quelque chose, quand on clique dessus, il va falloir le connecter à une fonction.Donc, Create Widget, Create Layout, Add Widget to Layout et Setup Connection, c'est quelque chose qu'on va utiliser tout le temps.
00:00:40 :Donc, ce qu'on va commencer par faire, c'est créer un bouton.Donc, le bouton, on va le créer dans la méthode Create Widget, et c'est le seul widget qu'on va créer.
00:00:48 :On aura juste un bouton à l'intérieur de notre interface sur lequel on va pouvoir cliquer.Donc, je vais faire self.btn, je vais l'appeler tout simplement bouton clic.
00:00:56 :Moi, j'aime bien préfixer le nom de mes variables de widget avec ce à quoi ça correspond.Donc là, dans le cas d'un bouton, je mets btn, et après je mets ce que ça va faire.
00:01:05 :Donc là, c'est un bouton tout simplement sur lequel on va cliquer, donc je l'appelle bouton clic.Pour pouvoir utiliser cette variable à l'intérieur de ma classe, je préfixe de self, donc self.bouton clic.
00:01:15 :On va dire que c'est égal à QtWidget.QPushButton, qui est la classe qui nous permet de créer un bouton.Et comme texte, on va mettre tout simplement clic, qui va nous indiquer qu'on veut cliquer sur le bouton.
00:01:26 :Donc cette chaîne de caractère ici qu'on passe en premier paramètre à QPushButton, c'est le texte qui va être affiché sur le bouton.On va faire une petite modification ici, puisque QMainWindow, c'est une fenêtre un peu plus complexe que ce qu'on pourrait avoir de base avec un QWidget.
00:01:40 :On va avoir par exemple une barre de menu, une barre de statut, et toutes ces choses-là.Et au niveau des layouts, c'est un peu différent.
00:01:47 :On le verra dans une prochaine application qu'on va faire.Et pour l'instant, je veux quelque chose de très simple.Donc moi, je vais tout simplement remplacer le QMainWindow ici par un QWidget.
00:01:55 :C'est possible de mettre tout simplement QWidget ici.Alors faire bien attention à la nomenclature.Ici, on a QtWidget.Et ici, c'est tout simplement QWidget.Aussi, faire attention au majuscule.
00:02:05 :Ici, le Q et le W sont en majuscule, et tout le reste est en minuscule.Alors que dans QtWidget, on a le Q en majuscule, le T en minuscule, le W en majuscule, et le reste en minuscule.
00:02:14 :Donc le Q et le W à chaque fois en majuscule, et le reste en minuscule.Donc QWidget ici, qui est tout simplement un widget de base qui va consister en une fenêtre,qui n'aura donc pas de barre de menu, pas de barre de statut, etc.
00:02:27 :Donc ça peut être pratique ou pas selon les cas de figure.Pour l'instant, je veux quelque chose de simple.Donc je vais tout simplement mettre QWidget ici.
00:02:34 :On va créer ensuite un layout.Donc le layout, je vais l'appeler tout simplement MainUnderscoreLayout,puisque c'est le layout principal.Et on va faire un layout qui va être vertical.
00:02:43 :Donc QVBoxLayout.Donc on a plusieurs types de layout, on en a trois principalement.Le QVBoxLayout, qui signifie que ça va être un layout vertical,qui va nous permettre d'ajouter des widgets à la verticale,donc les uns après les autres.
00:02:57 :On va avoir le QHBoxLayout, qui cette fois-ci va être horizontal,donc pour aligner des widgets de façon horizontale.Et le QGridLayout, qui va nous permettre d'afficher les widgets sous forme de gris.
00:03:08 :Donc moi je vais faire un layout assez simple ici, qui va être agencé de façon verticale.Donc un QVBoxLayout.Et pour que ça fonctionne, il ne faut pas oublier de donner un parent à ce layout.
00:03:18 :Et le parent, ça va tout simplement être notre QWidget, donc self.Donc je mets self ici entre les parenthèses,pour que mon layout soit parenté à mon QWidget,et qu'il apparaisse bien dans mon application.
00:03:29 :Donc on a notre layout, et ensuite on va pouvoir ajouter les widgets dans les layouts.Donc je viens dans ma méthode ici, AddWidgetToLayout.Et on va tout simplement utiliser la méthode AddWidget,donc self.MainLayout.AddWidget.
00:03:41 :Et on va dire qu'on veut ajouter le widget bouton underscore clic.Donc tout simplement AddWidget ici, pour ajouter un widget à l'intérieur d'un layout.Il faut remarquer qu'on a quelques avertissements ici.
00:03:52 :Si on va voir en bas le message que ça affiche, ça nous ditInstanceAttributeMainLayoutDefinedOutsideInit.Donc ça c'est un avertissement de PyCharm,qui nous dit qu'on a défini en fait un attribut de notre instance,donc self.MainLayout ici,
00:04:06 :et qu'on ne l'a pas défini directement dans init.Donc PyCharm il n'aime pas trop ça,et il préférait qu'on mette les définitions directement dans le init.
00:04:14 :Donc moi je préfère séparer les choses comme ça,donc ne vous en faites pas si vous avez un message d'avertissement ici,ce n'est pas très grave tant qu'on sait ce qu'on fait.
00:04:21 :Donc j'ai créé mon layout, j'ai créé mon widget,j'ai ajouté le widget dans le layout,et il ne nous reste plus qu'à faire la connexion.
00:04:29 :Donc la connexion entre le bouton et une méthode qu'on va tout de suite créer,qui va nous permettre d'afficher un message à l'utilisateur.Donc cette méthode on va l'appeler bouton clic,je vais coller le code ici en entier,et je vais vous expliquer ce que ça fait.
00:04:41 :Donc cette méthode elle s'appelle bouton clic,et on va la connecter au bouton.Donc pour ça dans setupConnections,on va dire que quand le signal clic du bouton est activé,on veut connecter ce signal à cette méthode.
00:04:53 :Donc on va dire self.boutonClick.clicked,donc clicked c'est le nom du signal qui va être activé quand on clique sur le bouton,donc il y a différents signaux comme ça qu'on verra tout au long de la formation,et on va dire connect.
00:05:04 :Donc self.boutonClick, donc ça c'est le nom du widget,clicked c'est le nom du signal,et connect c'est pour indiquer qu'on veut connecter ce signal à une méthode,et la méthode ça va être tout simplement self.boutonClicked.
00:05:15 :Alors attention il ne faut pas mettre les parenthèses ici,par défaut avec l'autocompletion ça met les parenthèses,et bien il faut les enlever puisqu'on ne veut pas appeler cette méthode ici,ce qui serait le cas si on laissait les parenthèses,mais on veut tout simplement renseigner le fait que
00:05:28 :on veut connecter cette méthode au signal clicked de notre bouton.Donc quand on va cliquer sur le bouton ça va appeler cette méthode,et ça va exécuter le code qui est à l'intérieur de cette méthode.
00:05:39 :Donc qu'est-ce qu'on fait ici ?Et bien on crée un QMessageBox,donc QMessageBox c'est tout simplement une fenêtre qui va contenir un message,qui va s'afficher, et qu'on va afficher à l'écran.
00:05:48 :Donc MessageBox égale QtWidgets.QMessageBox,on fait un SetWindowTitle ici pour changer le titre de ce MessageBox,donc on met Bravo tout simplement,et un SetText pour changer le texte qui est affiché dans ce MessageBox,et on finit avec Exec ici,qui nous permet d'afficher le MessageBox de façon modal.
00:06:06 :Donc modal ça veut dire qu'on ne pourra pas accéder à l'application en arrière-plantant qu'on n'aura pas validé ce MessageBox.On a différentes façons de faire, on peut utiliser Show,Show ça va afficher la fenêtre,mais on pourra tout de même avoir accès à l'interface derrière,et si jamais vous voulez afficher une fenêtre qui est bloquante,
00:06:23 :donc qu'on appelle modal,et bien vous pouvez utiliser à la place Exec.Il ne faut pas oublier ici le tiret du bas à la fin de Exec,puisque Exec c'est un mot réservé en Python,donc les gens qui ont développé PySide ont pallié à ce petit problèmeen mettant un tiret du bas après Exec.
00:06:38 :Donc c'est quelque chose qu'on fait assez souventpour ne pas se mélanger entre les mots qui sont réservés avec Python,donc Exec c'est quelque chose qui est réservé par Python,et la méthode Exec qui nous permet d'afficher ce MessageBox de façon modal.
00:06:50 :Donc normalement tout est bon, tout fonctionne,si je ne me suis pas trompé dans le code,on va pouvoir lancer notre application et la tester,donc je vais cliquer ici en haut à droite sur la petite flèche vertepour lancer l'application.
00:07:02 :Donc j'ai bien une application qui apparaît,on n'a plus de titre ici puisque je l'avais enlevé précédemment,on a bien notre bouton,on va cliquer dessus et voir si ça fonctionne,et ça fonctionne correctement,on a notre MessageBox qui apparaît,donc on va vérifier si c'est bien modal,donc comme je vous disais,
00:07:16 :vous voyez si j'essaie de cliquer sur la fenêtre derrière,ça ne fonctionne pas,je peux la déplacer mais je ne peux pas recliquer sur le bouton,je ne peux pas la fermer,il faut obligatoirement que je fasse quelque choseavec cette fenêtre ici avant de pouvoir accéder à mon application en arrière.
00:07:30 :Donc là je peux la fermer ou cliquer sur OK pour valider,et ça me donne accès de nouveau à cette fenêtresur laquelle je peux de nouveau cliquer pour afficher ce message.
00:07:38 :Donc c'est quelque chose de très simple,mais ça vous permet de voir le fonctionnement des widgets,des layouts et des connexions.Si on revient ici,peut-être quelque chose que vous avez remarqué,je n'ai pas préfixé cette variable MessageBox de self,donc c'est normal puisque je ne réutilise pas MessageBox ailleurs
00:07:53 :que dans cette méthode ici,donc je n'ai pas besoin de préfixer de self.Quand on met self devant ici,c'est pour que ça appartienne à notre instanceet pour qu'on puisse l'utiliser à travers les différentes méthodes.
00:08:04 :Vous voyez qu'ici je définis self.boutonCliqueet je le réutilise dans différentes méthodeset on n'a aucun problème.Si je ne mets pas de self iciet que j'essaie d'utiliser MessageBox en dehors de cette méthode,eh bien ça ne fonctionnera paspuisqu'elle n'appartiendra pas à l'instance.
00:08:18 :Donc ça c'est vraiment du piton de base,si jamais vous avez des problèmes avec ça,je vous conseille de revisionner mes autres formations,donc ma formation complète piton notamment,dans laquelle je parle en long, en large et en traversde toutes ces choses qui sont de l'orienté objet,donc la programmation orienté objet avec les classes.
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.