- 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 :Dans cette partie on va donc créer des signaux qui vont nous permettre de notifier notre interface àcertains moments du processus de conversion. Donc le truc qu'il faut savoir c'est qu'en fait on ne
00:00:10 :peut pas directement modifier notre interface depuis notre class worker ici. Les choses sontvraiment séparées, là on a vraiment le côté API avec notre image et là c'est même pas juste uneséparation au niveau API et interface, c'est vraiment qu'on ne peut pas, enfin on peut maisalors vraiment c'est très dangereux de le faire, modifier notre interface depuis un thread. Puisqu'on
00:00:30 :peut avoir plein de problèmes et ce qu'il faut faire en fait à la place c'est émettre dessignaux qui vont être récupérés par la boucle principale, donc par ici notre widget, et cessignaux donc dans le widget vont être interprétés pour faire différentes actions au niveau del'interface. Donc c'est vraiment ce mécanisme là que je vais vous montrer dans cette partie.
00:00:49 :Donc la création des signaux à l'intérieur de notre class worker qui vont ensuite être appelésqui vont être déclenchés si vous voulez par certaines actions et dans l'interface ici on vales récupérer pour modifier notre interface. Donc les signaux en fait on va les créer donc dans
00:01:05 :notre classe worker et on va les créer directement ici dans la classe. Donc on va faire un premiersignal qui va s'appeler finished et qui va être égal à cuticore.signal comme ceci. Donc c'est
00:01:17 :un signal, ça c'est la classe qui nous permet de créer un signal et le signal on lui donne un nomet on l'appelle finished. Donc ce signal c'est le signal qui va permettre d'indiquer que le
00:01:26 :processus de conversion est fini. Donc on va le mettre après notre boucle puisque notre boucleelle va convertir toutes les images et quand on va sortir de notre boucle et bien ça voudra signifierque toutes les images ont été converties et que le processus est donc terminé. Donc on va dire ici
00:01:41 :self.finished donc ça c'est notre signal et on va dire emit. Donc cette méthode emit en faitelle va déclencher le signal, elle va dire voilà le signal a été émis donc comme son nom l'indiqueet on va pouvoir récupérer ce signal à l'intérieur de notre classe ici main window. Donc je reviens
00:01:58 :ici dans convert images et ce qu'on va faire c'est qu'on va récupérer ce signal et lui dire à quoi onveut le connecter. Exactement comme ce qu'on a fait ici la started c'est un signal et on dit que
00:02:07 :le signal started on le connecte à une méthode. Donc là on va faire la même chose on va dire quequand sur notre worker le signal finished est émis et bien on veut connecter ce signal à quelquechose. Donc là ce qu'on va faire c'est qu'on va quitter le thread on va faire self.thread.quit
00:02:21 :comme ceci. Donc en fait ce qu'on dit c'est que quand on arrive à la fin quand on arrive à lafin de cette boucle ici on émet le signal finished quand le signal finished est émis qu'est ce qui sepasse et bien on a self.thread.quit qui est lancé et self.thread.quit qu'est ce que ça fait et bien
00:02:37 :ça quitte tout simplement le thread puisque là on l'a démarré mais pour bien fermer les chosespour bien finaliser le processus il faut quitter le thread donc c'est ce qu'on fait ici quand lethread a fini de faire son travail et bien on le quitte. Donc ça c'est pour le premier signal le
00:02:51 :signal finished qui nous permet de correctement quitter le thread. On va avoir un autre signalen fait qui va être émis lorsqu'une image est convertie puisque pour l'instant quand une imageest convertie on n'a aucun feedback visuel on ne sait pas si ça a fonctionné ou pas et l'icône
00:03:07 :ne change pas ici donc nous ce qu'on voudrait c'est savoir si la conversion a réussi et sioui changer l'icône pour ne plus avoir la croix mais pour avoir l'icône verte qui nous dit queça a fonctionné. Donc ce qu'on va faire c'est qu'on va faire un autre signal que je vais appeler
00:03:19 :image converted et qui va être égal là encore à cuticore.signal sauf que là on va mettre destrucs ici à l'intérieur de cette classe puisque on va envoyer des informations. Là quand on a créé
00:03:32 :le signal finished on n'envoyait pas d'informations, on faisait juste dire bon le signal a été émisdonc tu peux faire quelque chose en conséquence. Là avec image converted il va falloir qu'on sache
00:03:42 :quelle image a été convertie et si ça a fonctionné ou non. Donc pour ça on va mettre des choses iciet ce qu'on va mettre ici c'est en fait ce qu'on va envoyer quand le signal va être émis. Donc la
00:03:52 :première chose qu'on va envoyer c'est le list widget item qui est concerné donc le list widgetitem qui correspond à l'image qui a été convertie. Donc ça ça va être tout simplement un objet piton
00:04:02 :en général donc on va mettre objet. La deuxième chose qu'on va envoyer c'est un booléen puisqu'onva envoyer soit true soit false en fonction du résultat de la conversion. Donc soit la
00:04:11 :conversion va être réussie dans ce cas là on va envoyer true soit ça ne va pas marcher et onva envoyer false et en fonction de ce succès de ce booléen et bien on va changer l'icône dansnotre application. Donc ça ça va être un booléen donc je mets ici bool pour indiquer qu'on va
00:04:25 :envoyer un booléen et ça en fait je vais l'émettre directement dans notre méthode convert image. Doncje vais déjà récupérer dans une variable que je vais appeler success si l'image a bien été convertiepuisque donc là si je fais pomme B pour me rendre dans cette méthode on retourne ici si vous vous
00:04:42 :rappelez bien si le chemin existait ou non. Donc c'est ça qui va déterminer si le processus a bienfonctionné ou pas. Donc si l'image a bien été convertie on va retourner true et sinon on va
00:04:52 :retourner false. Donc ça on va le récupérer ici dans une variable que j'appelle success et on vaémettre ensuite le signal ici tout de suite après la conversion de notre image. Donc on va dire self.image
00:05:03 :converted.emit donc là encore on émet le signal et on va envoyer en même temps des informationsdonc comme je vous disais ce qu'on va envoyer c'est le listToJetItem et la variable success.
00:05:15 :Donc comme ça ça va nous permettre de récupérer dans notre interface ce listToJetItem et lavariable succès et de modifier l'interface en conséquence. Donc ça c'est au niveau du signal
00:05:24 :et maintenant donc on retourne le connecter dans notre méthode convert images ici et donc dansnotre méthode convert images il va falloir connecter ce signal à une méthode qu'on vacréer à l'intérieur de notre interface. Donc ce signal je vais le connecter ici je vais dire donc
00:05:40 :self.worker.imageConverted.connect donc là encore c'est la même chose on a le nom du signal et ona connect qui va nous permettre de le connecter à quelque chose et on va le connecter à une méthodeici que je vais créer qui va s'appeler imageConverted. Donc là je mets le même nom mais ça pourrait être
00:05:57 :autre chose on peut mettre ce qu'on veut si je mets fou ici et bien je vais le connecter à fou commececi donc là c'est juste vraiment que le nom fait du sens donc si je mets ici imageConvertedvoilà je vais connecter ça à imageConverted donc ça n'a pas besoin d'être la même chose que le nom
00:06:13 :du signal je fais bien l'attention de le mentionner c'est juste que là donc on a le nom du signal etlà on a le nom de la méthode qu'on appelle. Donc cette méthode c'est la méthode qui va être appelée
00:06:22 :quand le signal ici est émis donc quand on arrive ici dans notre méthode convertImage à cetteémission du signal c'est la méthode imageConverted ici qui va être appelée. Donc cette méthode on
00:06:33 :lui envoie des informations si vous vous rappelez ici on envoie le ListWidgetItem et le Successdonc il va falloir récupérer ces éléments à l'intérieur de notre méthode imageConverted ici.
00:06:42 :Donc les deux éléments qu'on va récupérer ça va être le ListWidgetItem et si oui ou non laconversion a réussi donc là je fais deux paramètres un paramètre ListWidgetItem etun paramètre Success. Donc ce paramètre ListWidgetItem il va récupérer le ImageListWidgetItem
00:06:57 :qu'on envoie ici et le paramètre Success il va récupérer le booléen Success que l'on récupèrequand on fait la conversion et que l'on envoie également lors de l'émission de ce signal. Donc
00:07:08 :à l'intérieur de cette méthode ici on va pouvoir vérifier tout d'abord si Success est True donc onva pouvoir faire juste if Success donc si c'est True on va passer à l'intérieur de la structureconditionnelle et on va modifier l'icône de notre ListWidgetItem. Donc pour ça on va faire
00:07:24 :ListWidgetItem.setIcon donc cet icon qui nous permet de modifier l'icône et si vous vousrappelez bien l'icône on y a accès en faisant comme ceci ImageChecked à partir de notre CTXpuisque si je vais dans Main on avait notre propriété ici ImageChecked qui nous retournaitle QIcon qui correspond à l'image qui signifie que la conversion a bien réussi. Donc je change
00:07:46 :l'icône de mon ListWidgetItem si ça a réussi. Je vais également changer l'attribut Processed doncc'est là qu'on va le changer à True donc je vais dire ListWidgetItem.processed égale à True puisque
00:07:57 :si ça a réussi ça veut dire que l'image est convertie et donc on veut modifier cet attributqui par défaut était à False. Donc c'est les deux choses qu'on fait on change l'icône et on change
00:08:06 :l'attribut Processed pour que si jamais on relance le processus par la suite et bien cet attribut ilsoit à True et vous vous rappelez cet attribut on le vérifie ici donc si l'attribut est à True on nereconvertit pas l'image une deuxième fois. Donc c'est là l'intérêt de cet attribut qui au départ
00:08:21 :quand on si vous vous souvenez bien ici quand on ajoute l'image dans le ListWidget il est à Falsepour signifier que l'image n'a pas été convertie ensuite on vérifie dans le processus là quand onconvertit les images si l'image a été déjà convertie ou non si ce n'est pas le cas on l'a
00:08:35 :convertie et une fois qu'on l'a convertie quand on émet le signal ici et qu'on se rend dans cetteméthode et bien on change la valeur de cet attribut pour dire que l'image a été convertie etdonc on le met à True. Donc on va pouvoir tester tout ça on va tester si les signaux se connectent
00:08:50 :bien et si on a bien l'icône en fait qui change sur notre ListWidget donc je vais stopper monapplication et la relancer et on va réessayer une nouvelle fois de convertir nos images doncje prends tout ça je glisse ça ici j'appuie sur conversion et vous voyez que automatiquement c'est
00:09:06 :magique on a les icônes qui changent ici au fur et à mesure que les images sont converties et sije regarde ici j'ai bien encore toutes mes images qui ont été correctement converties donc c'estvraiment un gros morceau comme je vous dis ça prend du temps à bien comprendre entre la méthode
00:09:20 :ici qui est appelée qui est connectée au signal la création des signaux ici dans notre classworker qui sont ensuite appelés donc qui sont émis dans notre méthode avec donc les deux signauxici image converted et le signal finished et les informations qu'on envoie entre le worker ici et
00:09:37 :l'interface donc par exemple ici le ListWidgetItem et le success donc il ne faut pas oublier quandon crée le signal de spécifier à l'intérieur de notre classe quand on fait le signal ici imageconverted de spécifier ce que l'on envoie quand on émet le signal donc voilà là vous pouvez mettre
00:09:52 :autant de choses que vous voulez là j'en ai mis deux j'ai mis object et boolean si jamais vousvouliez envoyer d'autres informations vous pourriez les mettre à la suite ici spécifier de quel typed'objet sont ces informations donc soit des booleans soit des chaînes de caractère etc onpeut envoyer vraiment tout ce qu'on veut et ensuite on les récupère donc grâce à la connexion ici
00:10:10 :dans une méthode qui va nous permettre de modifier en conséquence notre interface graphique doncvoilà pour cette grosse partie sur les signaux à l'intérieur de notre thread et de notre workeret dans la prochaine partie on va finir tout ça avec le progress dialogue puisque pour l'instanton n'a pas de barre de progression quand on lance la conversion on a juste les icônes qui
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.