- 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 :Alors accrochez-vous puisque dans cette partie on va attaquer le threading donc qui va nouspermettre de convertir nos images en arrière-plan sans geler l'interface. Alors c'est une grosse
00:00:09 :partie donc restez avec moi concentrés, on commence tout de suite. Avant d'oublier on varepasser cet attribut ici à false puisque on l'avait mis à true dans la partie précédentepour tester notre message box mais par défaut on veut que les images soient considérées commen'étant pas déjà été converties donc n'oubliez pas de remettre ça à false avant de commencer.
00:00:28 :Donc la première chose qu'on va faire c'est créer notre propre version d'un QObject. Alorsun QObject c'est tout simplement un objet qui appartient à Qt qui va nous permettre de définirdes méthodes et notamment également tout un système de signaux et de connexions donc ça onverra ça dans la prochaine partie plus en détail. Pour l'instant on va juste créer le worker,
00:00:46 :le thread et dans ce thread et dans ce worker on va en fait faire les méthodes qui vont nouspermettre de convertir nos images. Donc ici je vais faire une classe que je vais appeler worker
00:00:56 :tout simplement et on va hériter de QtCore.QObject. On va faire comme d'habitude une méthode init età l'intérieur de cette méthode on va appeler la méthode init du parent donc de QObject. Ici je
00:01:09 :vais indiquer quelques paramètres donc on va passer plusieurs choses à ce worker, on va passer laliste des items qu'on veut convertir donc ça va être les listes widget items qu'on va vouloirconvertir, on va passer la qualité, la taille et le dossier donc la qualité, la taille c'est pour
00:01:24 :notre API et le dossier également le dossier dans lequel on veut convertir nos images. Donc on vamettre tous ces attributs ici le premier je vais l'appeler imagesToConvert, le deuxième je vaisl'appeler quality, le troisième size et le dernier on va l'appeler folder. Je vais récupérer ici tout
00:01:39 :ça dans des attributs de ma classe donc je vais faire self.imagesToConvert qui va être égal àimagesToConvert, on va récupérer quality également, taille et notre dossier donc self.folder qui
00:01:51 :va être égal à folder. Donc je les récupère dans des attributs ici qui sont liés à self puisque je vaisvouloir les utiliser dans une autre méthode qu'on va créer tout de suite qui est la méthode danslaquelle on va convertir les images. Donc je vais faire une méthode que je vais appeler convertImages
00:02:05 :et à l'intérieur de cette méthode on va boucler sur les images à convertir et grâce à notre APIon va faire la conversion. Donc notre API si vous vous souvenez bien si je vais dans images ici on
00:02:16 :avait une classe custom image qui nous permettait de convertir notre image donc on va l'importer àl'intérieur de notre script ici donc on va dire from package.image import custom image donc ça
00:02:27 :c'est notre classe qui est dans l'API. Donc on va boucler à travers toutes les images à convertirdonc je vais dire pour images list widget item puisque ça ça va être des list widget item vousallez voir quand on va créer notre instance du worker et qu'on va lui passer ici les images à
00:02:41 :convertir on va lui passer directement les list widget item donc là j'appelle ça images-lw-itemdonc lw qui signifie list widget en raccourci et on va boucler donc dans images-to-convert doncself.images-to-convert. On va vérifier si l'image a déjà été processée ou non donc là on va
00:03:01 :utiliser notre attribut processed on va vérifier donc s'il n'a pas déjà été mis à true donc on vadire if not image-list-widget-item.processed donc ça veut dire que si elle n'a pas été
00:03:12 :processée il va falloir la convertir donc if not image-list-widget-item.processed et bien on vacréer une instance de notre image et on va la convertir donc je vais créer une instance àpartir de ma classe custom image et cette classe alors si je fais pomme B en sélectionnant doncj'ai mis mon curseur en fait sur le nom de la classe ici et si je fais pomme B automatiquement
00:03:32 :ça m'emmène dans la classe donc dans le fichier images dans ma classe donc là on lui passait lechemin de l'image et le dossier dans lequel on voulait mettre l'image convertie donc on va luipasser ces deux informations donc la première chose c'est le chemin le chemin ça va être tout
00:03:46 :simplement le texte de notre liste widget item donc on va faire image-list-w-item.text donc çaça va être le chemin complet vers notre image et le dossier ça va être la variable qu'on arécupéré ici donc self.folder donc je lui passe voilà cet attribut ici self.folder que l'on aura
00:04:03 :envoyé quand on va créer là encore notre instance de worker donc on ne l'a pas fait encore mais çaon va le faire tout de suite après dans notre méthode convert images. Donc une fois que j'ai
00:04:12 :mon instance de mon image je vais pouvoir la réduire donc je vais faire image.reduceImagedonc là encore si on veut aller rapidement à cette méthode on fait pomme B ou ctrl B et çanous amène directement là où est définie la méthode et on va lui passer donc la taille et la
00:04:27 :qualité donc ça je l'avais défini là encore ici dans la méthode init on avait récupéré la qualitéet la taille donc je vais pouvoir lui passer directement ici donc le paramètre size on luipasse self.size et quality on lui passe self.quality donc là voilà grâce à notre API on crée une
00:04:42 :instance de notre image et on lance la conversion de l'image. Donc on a presque tout ce qu'il fautici pour notre worker maintenant il faut en fait créer donc l'instance de ce worker et le lier àun thread donc on va retourner dans notre méthode convert images et juste après ici donc après le
00:04:58 :message box donc si on n'a aucune image à convertir on affiche le message box et on return false doncon arrête la méthode si par contre on a des images à convertir et bien on va continuer icidonc ce bloc ne serait pas exécuté et on va convertir nos images avec le worker et le thread
00:05:13 :alors la première chose qu'on va faire c'est créer ce thread donc on va faire un attribut que je vaisappeler self.thread et ça va être égal à qtcore.qthread donc qthread c'est la classe qui nous
00:05:24 :permet de créer un thread et on va lui donner en parent notre QWidget donc self qui est en faitl'application elle-même. Une petite parenthèse ici faites bien attention de faire self.thread et
00:05:35 :non pas juste thread puisque si on fait une variable comme ça qui n'appartient pas à self donc quin'appartient pas à mon instance et qu'elle est juste locale à ma méthode on a en Python ce qu'onappelle le garbage collector qui est en fait un programme qui s'occupe de gérer la mémoire de
00:05:49 :nos scripts Python qui quand il va arriver à la fin de notre méthode va se dire bah cettevariable elle appartient à la méthode je suis arrivé à la fin de la méthode donc je n'enai plus besoin et il va tout simplement l'enlever de la mémoire et donc là on aura lancé un thread
00:06:02 :mais en arrivant à la fin de la méthode le garbage collector va le supprimer donc ça va être trèsproblématique et ça va causer des problèmes donc pour vous assurer que le garbage collector ne vapas supprimer ce thread on fait self.thread comme ça il appartient à self, self c'est quoi ça va
00:06:18 :être mon instance donc ici de mon QWidget et donc tant que le QWidget sera ouvert donc tant que monapplication sera ouverte et bien le garbage collector n'ira pas supprimer automatiquementce thread donc bien important ici de faire self.thread et non pas juste thread dans cette
00:06:32 :partie ensuite on va créer donc notre worker donc on va créer une instance à partir de notre classeworker donc je vais l'appeler worker comme ça tout simplement et on va créer une instance àpartir de notre classe donc la première chose qu'on veut lui donner c'est les images à convertir
00:06:46 :donc images to convert ça va être égal à tous les list widget items qu'on a récupéré à laligne 93 ici quand on a fait notre compréhension de liste donc on va lui passer tous ces list widgetitems ensuite on va lui passer donc dans quality la variable quality qu'on avait récupéré ici
00:07:03 :auparavant on va faire pareil pour size et pour folder donc là faut bien faire la distinctionencore entre le paramètre ici donc ça c'est le nom du paramètre que l'on a défini ici doncquality size et folder et là après je veux lui dire que c'est égal à quality et là c'est la
00:07:17 :variable donc là si je mets quality par exemple ça correspond à ça à cette variable ici donc sije change si je mets par exemple q ici il faut que je change ici pour mettre q donc voilà jefais juste changer ici les variables vite fait pour vous montrer bien la différence entre le
00:07:29 :paramètre et la variable que l'on passe ici moi je vais remettre après quality puisque je trouveque le nom est plus explicite mais il faut bien faire la différence entre les deux ensuite jevais passer le size donc size qui là encore va être égal à size et folder qui va être égal à
00:07:43 :folder donc on a maintenant notre thread on a notre worker et on va devoir lier les deux puisqueen fait ce qui va faire le travail donc c'est pour ça que je l'ai appelé worker ici ce qui va fairele travail c'est ça ici c'est le worker sauf que si on fait juste lancer directement notre méthode
00:07:58 :convert images donc si on faisait par exemple self.worker.convert images comme ceci et bienlà on n'aurait pas un thread on aurait juste une méthode qui commence à convertir les images et sion n'utilise pas de thread comme je vous dis automatiquement on va avoir des problèmesdans notre interface puisque ça va geler on va avoir un processus assez lourd qui va rouler et
00:08:17 :notre interface ne va plus répondre correctement donc pour que notre interface ne gèle pas il fautpasser par un thread donc on va devoir bouger ce worker donc cette instance ici qui va faire letravail à l'intérieur du thread donc pour ça on va utiliser la méthode moveToThread donc on va
00:08:32 :bouger si vous voulez cette instance dans le thread et après c'est le thread qu'on va démarrer et quiva faire le travail donc on va faire self.thread ici on bouge notre worker dans le thread et
00:08:43 :ensuite on va utiliser le signal started de notre thread donc c'est un signal qui va être déclenchéquand on va utiliser la méthode start sur notre thread et on va lui dire qu'est ce qu'il fautqu'il fasse en fait le thread quand il va démarrer donc on va faire self.thread.started et on va
00:08:58 :connecter ce signal à la méthode convert images de notre worker donc on va faire self.worker.convertimages on n'oublie pas d'enlever les parenthèses puisque on ne veut pas là encore appeler cetteméthode on veut juste faire la connexion donc là ce qu'on dit c'est comme c'est comme dans lessetup connections en fait c'est comme quand on fait des signaux ici qu'on connecte quand on a
00:09:16 :le clicked que l'on connecte à une méthode là c'est pareil en fait on a juste un signal sur notrethread qui s'appelle started et on lui dit que on va le connecter en fait à notre méthode convertimages sur le worker donc comme ça quand on va démarrer le thread qu'est ce qui va faire le
00:09:30 :thread il va lancer la conversion des images à partir de notre travailleur ici donc la dernièrechose qu'il nous reste à faire et bien c'est tout simplement de lancer le thread donc pour ça on vautiliser la méthode start et la méthode start qu'est ce qu'elle va faire et bien elle va déclencher
00:09:43 :ce signal started et on va donc partir dans cette dans cette méthode ici convert images qui vaconvertir les images donc normalement on a tout qui devrait fonctionner ici si je n'ai pas faitd'erreur j'ai écrit beaucoup de code là sans jamais tester mais normalement ça devrait fonctionnerdonc on va tester ça tout de suite on va lancer l'application et si je reviens ici donc pour tester
00:10:01 :je vais glisser ces images ici et on va cliquer sur conversion et normalement on devrait avoirvoilà le processus qui démarre et notre dossier avec les images qui sont converties donc pourl'instant il y a encore beaucoup de choses qui manquent on n'a pas les icônes qui changent dans
00:10:16 :notre liste on n'a pas la barre de progression etc etc mais au moins vous voyez qu'on a bien leprocessus qui démarre donc dans le thread et les images qui sont converties et si on regarde lepoids des images on voit bien que les images sont beaucoup plus légères sur le disque donc ça veut
00:10:30 :dire que la conversion a bien fonctionné donc ça c'est la base vraiment c'est le thread avec notreworker c'est comme ça qu'on peut faire en fait un processus qui ne va pas geler notre interfaceet dans les prochaines parties on va cette fois ci s'attaquer à tout ce qui est signaux puisque
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.