- 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 pour l'instant avec notre application on n'a aucun moyen d'interrompre le processus.Quand on clique sur le bouton annuler dans notre progress dialogue et bien ça ne fait rien ça vajuste fermer la barre de progression mais le processus va continuer en arrière-plan. Donc ce
00:00:13 :qu'on va faire c'est on va ajouter un attribut qu'on va changer et quand on va cliquer sur lebouton cancel on va changer cet attribut à false et bien on va savoir que le processus a été annuléet qu'il faut arrêter. Donc ce que je vais faire c'est tout d'abord connecter le clic sur le bouton
00:00:29 :cancel à une méthode. Donc ça va être sur le progress dialogue donc prgDialogue, je vais lemettre juste avant le show. On va avoir le signal cancelled qui va pouvoir être connecté à une
00:00:41 :méthode. Donc cancel c'est le signal qui va être appelé quand on va cliquer sur le bouton annulertout simplement. Donc je vais avoir une méthode que je vais appeler abort. Abort ça veut dire
00:00:49 :annuler en anglais et donc cette méthode je vais la mettre juste après ici. On la crée et pourl'instant je vais juste faire un print et je vais mettre annuler comme ceci et on va tester pourvoir si ce signal fonctionne bien. Donc je relance ici, je sélectionne des images, je les glisse, je
00:01:04 :clique sur conversion, je clique sur annuler au milieu. Donc là vous voyez que le processuscontinue donc même si on a annulé en fait pour l'instant on a juste fait en sorte que le progressdialogue se ferme mais le processus continue quand même. Si je reviens à l'intérieur ici de mon
00:01:19 :interface vous voyez bien qu'on a annulé qui est affiché donc ça veut dire que le signal fonctionnemais pour l'instant il n'interrompt pas du tout le thread. Donc ce qu'on va faire c'est que on va
00:01:28 :ici déjà quitter le thread donc on va faire self.thread.quit donc ça va permettre d'arrêteren fait le thread puisque là on l'a démarré mais après il va falloir l'arrêter sinon il va continuerd'être là en arrière-plan et quand on va fermer notre interface on va avoir des messages d'erreur
00:01:44 :qui vont nous dire que le thread n'a pas été correctement arrêté. Donc ça c'est la premièrechose qu'on va faire sauf que si on fait juste ça pour l'instant ça ne va pas arrêter le processusen tant que tel. Le processus du worker ici il va continuer de rouler puisque cette méthode
00:01:58 :va être toujours active. Donc ce qu'il faut faire c'est en fait on va rajouter un attribut que l'onva vérifier ici et qui va être modifié quand on va cliquer sur le bouton annuler. Donc cet attribut
00:02:10 :par défaut je vais le mettre a true donc je vais faire un attribut je vais l'appeler runs et jevais le mettre a true. Donc tant que cet attribut est vrai on va continuer avec la conversion des
00:02:18 :images. Donc ça on va le vérifier ici dans notre boucle pour l'instant on vérifie juste si l'imagen'a pas déjà été convertie et donc on va rajouter à l'intérieur de ces structures conditionnellesune vérification pour vérifier si cette variable est toujours vraie ou non. Donc si elle est vraie
00:02:32 :ça veut dire qu'on n'a pas cliqué sur annuler et donc on va continuer la conversion et si jamaiselle est fausse ça veut dire que eh bien on a cliqué sur annuler et que donc on ne veut pluscontinuer avec la conversion des images. Donc je fais ma vérification ici je vais vérifier est-ce
00:02:46 :que self.runs est true. Donc pour vérifier que quelque chose est true on n'a pas besoin de faireis true comme ceci on peut juste faire if self.runs donc juste if self.runs and not image
00:02:59 :list widget item.process. Donc on vérifie deux choses les deux conditions qu'il faut remplir pourcontinuer la conversion c'est que le runs ici est égal à true et que l'image n'a pas déjà étéconvertie. Donc on vérifie ces deux conditions et si c'est le cas si runs est toujours égal à true
00:03:15 :et que l'image n'a pas été convertie on l'a convertie. Si l'image a déjà été convertie on lapasse ou si runs n'est plus égal à true donc si on a cliqué sur le bouton annuler on arrête eton ne passe pas à l'intérieur de cette structure conditionnelle. Donc ce runs il va falloir le
00:03:29 :modifier quand on clique sur le bouton annuler donc on va retourner dans notre méthode abort iciet on va tout simplement faire self.worker.runs égal false donc on modifie l'attribut runs de
00:03:41 :notre worker et on le passe à false donc comme ça si on clique sur le bouton annuler il serafaux et on ne va pas passer dans cette structure conditionnelle. Donc on avait besoin de faire tout
00:03:50 :ça de créer un attribut qu'on modifie et également de quitter le thread puisque si on ne le quitte paset qu'on ferme notre interface avec un thread qui est toujours en train de rouler on va avoir commeje vous dis des erreurs qui vont être affichées et c'est pas une façon très propre de travailler.
00:04:03 :Donc c'est les deux choses à modifier ne pas oublier à la fin aussi donc de quitter le thread on lequitte également quand le processus est fini si vous vous souvenez bien quand on a le signalfinish qui est émis on a le self.thread.quit qui est également appelé pour ne pas avoir là
00:04:18 :encore un thread qui est toujours actif même s'il ne ferait plus rien puisque le processus ici quandon a fini quand on émet ce signal le processus est terminé on ne passe plus dans la boucle maisle thread lui il est toujours vivant tant qu'on n'appelle pas quit le thread il va être là et
00:04:33 :pour donc bien fermer les choses comme quand on ouvre un fichier il faut le fermer ben là c'estpareil quand on a fini un processus on va tout simplement quitter le thread donc il ne faut pasoublier de faire ça donc je vais réessayer de voir si ça fonctionne je vais lancer mon interface
00:04:46 :et on va essayer d'interrompre le processus en plein milieu donc je vais supprimer ce dossierpour voir si ça fonctionne je sélectionne tout ça je le glisse dans mon interface je lance laconversion et si en plein milieu ici je clique sur annuler normalement vous allez voir que voilà
00:05:01 :le processus s'arrête donc on a bien les quatre premières images qui ont été converties c'est lecas ici on a bien nos quatre premières images sauf que par la suite les trois dernières n'ont pasété converties et donc si on continue si on veut continuer avec la conversion on peut cliquer ici
00:05:15 :sur conversion ça va relancer le processus et vous voyez qu'automatiquement il continue uniquement àpartir donc des trois dernières images qui n'étaient pas converties puisque quand on convertit une imageon change l'attribut processed on le met à true et on fait cette vérification à l'intérieur de notreméthode ici pour ne pas convertir une image qui a déjà été convertie donc c'est là aussi tout
00:05:34 :l'intérêt imaginez vous avez 2000 images à convertir vous lancez le processus ça prendbeaucoup de temps vous arrivez avec les mille premières images qui ont été converties finalementvous avez besoin d'interrompre le processus puisque je sais pas vous allez dormir et lelendemain vous voulez relancer le processus c'est bien vous n'avez pas envie qu'il repasse qu'il
00:05:52 :refasse la conversion sur les mille premières images qui ont déjà été converties donc vouspouvez très bien annuler le processus en cours de route et le relancer plus tard et il va continuerà partir de là où il s'est arrêté en ne convertissant que les images qui n'ont pas déjà
00:06:04 :été converties donc voilà pour cette partie dans laquelle on a vu comment interrompre le processusavec notre worker et notre thread donc on arrive à la fin de cette application on a tout quifonctionne on peut modifier donc tous ces attributs et si vous les modifiez vous allez voir que ça fait
00:06:19 :une grosse différence au niveau de la qualité si je mets une qualité de 10 par exemple je vaisvous montrer ce que ça donne ça donne un résultat assez médiocre mais au moins on a une tailled'image qui est grandement réduite donc là je peux sélectionner ces images et par exemple appuyer
00:06:33 :sur ma touche delete pour les supprimer on va voir il y a encore deux trois trucs je crois quej'ai à vous montrer dans la prochaine partie par exemple là si vous avez bien remarqué je peux passélectionner plusieurs images d'un coup donc c'est un peu problématique donc dans la prochaine partie
00:06:45 :on rajoutera une ou deux lignes de code pour permettre en fait de pouvoir sélectionnerplusieurs images d'un coup et les supprimer en une seule fois donc là si je remets toutes mesimages voilà ici et que j'appuie sur conversion ça va lancer donc le processus et si on regarde
00:06:58 :la qualité des images vous allez voir que là c'est assez médiocre donc je ne sais pas à quelpoint vous le voyez mais si je zoome un peu ici vous voyez qu'on a beaucoup d'artefacts quicommencent à apparaître et la qualité est vraiment vraiment moins bonne mais on a une qualité d'image
00:07:12 :aussi qui est beaucoup moindre donc pour des images pour le web pour des thumbnails par exemple ça peutêtre pratique donc voilà pour cette partie et dans la prochaine partie comme je vous dis on vaterminer les deux trois petits trucs qui restent notamment donc la possibilité de sélectionner
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.