- 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 personlive_helpToutes les questions
Christian Aucane
16 janvier 2023 - 16 janvier 2023 à 1:39
checkConversation résolue
1 réponse
Il manque les images
Salut, il n'y a pas de lien pour télécharger les images
00:00:00 :On va commencer la méthode ConvertImages qui va me permettre de convertir les images.On va y aller en plusieurs parties puisque ça va être assez long.
00:00:09 :Pour l'instant, on va récupérer les valeurs qui sont dans l'interface,à savoir la qualité, la taille et le dossier dans lequel on veut exporter les images.
00:00:17 :Ensuite, on va vérifier s'il y a des images à convertir puisqu'il ne se peut que les images aient déjà été converties.On va passer à travers tous les items dans notre liste pour vérifier la valeur de leur attribut Processed.
00:00:28 :Si vous vous souvenez, ici on avait ajouté un attribut Processed qui était à False.Donc on va vérifier s'il y a des images dans la liste qui ont un attribut Processed ici qui est égal à Falsepuisque si toutes les images dans la liste ont l'attribut Processed à True, ça veut dire que toutes les images ont déjà été converties.
00:00:43 :Donc ça, on va le vérifier à l'intérieur d'une boucle, en fait à l'intérieur d'une compréhension de liste même, vous allez voir.Et s'il n'y a aucune image à convertir, on va afficher un message à l'utilisateur qui dittout simplement qu'il n'y a aucune image à convertir car toutes les images ont déjà été converties.
00:00:58 :Donc on va faire tout ça dans cette partie.Alors la première chose qu'on va faire, c'est récupérer la qualité, la taille et le folder.Donc la qualité, on va mettre ça dans une variable que je vais appeler Qualityet ça va être égal à notre SpinboxQuality sur lequel on va récupérer le Value.
00:01:14 :Donc Value, c'est la valeur qui va être inscrite dans le Spinbox.On va faire pareil avec la taille, donc on va mettre ça dans une variable que je vais appeler Sizeet on va récupérer sur le SpinboxSize cette fois-ci la valeur et on va la diviser par 100puisque si vous vous souvenez bien, dans l'API, on n'utilise pas une valeur qui va de 1 à 100 mais de 0 à 1.
00:01:33 :Donc on va modifier cette valeur, par exemple si on a 50, on va la diviser par 100 et on va se retrouver avec 0.5.Alors pour être sûr d'avoir des nombres décimaux, on va diviser par 100.0.
00:01:43 :Comme ça, en divisant par un nombre décimal, on va s'assurer d'avoir en retour un nombre décimalvu que là on va être dans des nombres qui vont être entre 0 et 1.
00:01:52 :Donc pour avoir un nombre par exemple comme 0.5, on met un nombre décimal ici pour la division.Ensuite, on va récupérer le dossier dans lequel on veut écrire les images.
00:02:01 :Donc je vais faire une variable que je vais appeler Folder et on va récupérer sur notre LineEdit cette fois-cila méthode Text qui va me retourner le texte qui est inscrit dans le LineEdit.
00:02:11 :Donc par défaut, c'est le texte qu'on a mis dans notre méthode ModifyWidget ici, donc la chaîne de caractère Reduced.Donc on va récupérer ces trois valeurs et ensuite on va faire, comme je vous disais, des compréhensions de listepour déjà récupérer tous les items dans notre ListWidget et ensuite vérifier s'il y a des items qui n'ont pas encore été convertis.
00:02:30 :Donc la première liste que je vais faire, je vais l'appeler ListWidgetItems comme ceci.Ça va être égal à une compréhension de liste et ça va ressembler très fortement à ce qu'on avait fait iciqui nous permettait de récupérer tous les éléments dans notre ListWidget.
00:02:43 :Donc je vais tout simplement copier cette ligne ici, je vais la coller à l'intérieur de mon autre compréhension de liste iciet je vais juste enlever ici texte puisque là, dans ce cas-ci, je ne veux pas récupérer le texte des ListWidgetItemsmais directement les ListWidgetItems.
00:02:58 :Donc je fais juste ici self.lwfiles.items, je lui passe l'index sur lequel on boucleet ça va me récupérer dans cette variable ici une liste de tous les items qui sont dans mon ListWidget.
00:03:09 :On va ensuite faire une autre compréhension de liste qui va s'appeler images à convertir.Donc là encore, on fait une compréhension de liste et cette fois-ci, on va boucler à travers tous les items qui sont dans notre listequ'on a récupéré à la ligne précédente dans la variable ListWidgetItems.
00:03:25 :Donc on va dire pour ListWidgetItems, sans s, in ListWidgetItems,donc là je boucle à travers tous mes ListWidgetItems à l'intérieur de cette listeet on va faire quelque chose, en fait on va ajouter 1, donc on va dire 1 pour ListWidgetItems, in ListWidgetItemssi on n'a pas ListWidgetItems.processed.
00:03:46 :Alors je vous explique, ListWidgetItems.processed c'est ce qu'on avait mis ici,donc par défaut c'est égal à false.Donc si l'image n'a pas été processée, donc si elle n'a pas été convertie,et bien on va ajouter 1.
00:03:59 :Si l'image a été convertie, on n'ajoute rien.Donc là en fait ce que ça va faire, c'est que ça va passer à travers chaque élément dans ma liste,si l'image est convertie, on ajoute 1 dans la liste, si l'image n'est pas convertie, on n'ajoute rien.
00:04:10 :Donc c'est à dire que si toutes les images ont été converties, on ne va rien ajouter dans la liste,et on aura ici une liste vide.
00:04:16 :S'il y a par contre au moins une seule image qui n'a pas été convertie,on va se retrouver avec une liste qui va contenir le nombre 1.
00:04:22 :Si on a deux images qui n'ont pas été converties, on va retrouver une liste avec deux éléments,et chaque élément ça va être 1.Donc là on met 1 à chaque fois, on pourrait mettre 5, on pourrait mettre 6, on pourrait mettre n'importe quoi,c'est juste ici une liste que je crée qui va me permettre de vérifier s'il y a encore des images à convertir ou non.
00:04:38 :Donc là par exemple je vais faire un print de cette liste, vous allez voir,donc je print images à convertir, on va lancer l'interface,et là vous allez remarquer je vais vous fournir avec les sources de cette session plus d'images,donc c'est des images qui sont un peu plus volumineuses,
00:04:51 :donc comme ça on va pouvoir avoir le temps de voir le processus de conversion,puisque avec les images que j'avais précédemment ça allait tellement vite qu'on n'avait même pas le temps de voir ce qui se passait en fait dans l'interface.
00:05:00 :Donc si j'ajoute toutes ces images ici, hop, dans ma liste,par défaut donc leur attribut processed va être égal à false,donc elles n'ont pas été encore converties,et donc si je clique sur conversion, et qu'on retourne voir ici notre liste,on a bien une liste qui contient autant de fois le nombre 1 que j'ai d'images qui n'ont pas été converties.
00:05:16 :Donc ça fonctionne, je vais faire une petite manipulation pour vous montrer ce qui se passesi on a toutes les images qui ont été converties,donc ici plutôt que de mettre false, je vais mettre true.
00:05:26 :Donc on va considérer que toutes les images par défaut ont été déjà converties.Donc je relance l'interface, je glisse ces images à l'intérieur,je clique sur conversion, et si on revient là, cette fois-ci vous voyez qu'on a une liste vide,puisque toutes les images ont l'attribut processed qui est égal à true,
00:05:42 :donc on ne récupère rien à l'intérieur de notre liste.Donc ça ici ça va nous permettre de faire une vérification,on va vérifier s'il y a des images à convertir ou non,on va dire que s'il n'y a pas d'image à convertir, donc if not image à convertir,eh bien on va afficher un QMessageBox.
00:05:57 :Alors là je n'ai pas besoin d'utiliser len, ça c'est quelque chose que les débutants font souvent,ils vont vérifier la longueur de la liste,donc ils vont vérifier si la liste contient au moins un élément avec la fonction len, etc.
00:06:07 :On peut juste mettre ça ici, puisque une liste vide est false.Donc on n'a pas besoin de vérifier avec la fonction len,on peut juste mettre directement notre liste ici.
00:06:16 :Donc if not image à convertir, donc s'il n'y a pas d'image à convertir,eh bien on va afficher un MessageBox.Donc le QMessageBox c'est contenu à l'intérieur de QtWidgets,donc qtwidgets.qmessagebox,
00:06:28 :et on va lui passer déjà l'icône qu'on veut mettre dans notre MessageBox.Donc là encore on a plusieurs icônes qui sont disponibles directement avec PySide,pour par exemple un message d'erreur, un message d'information, d'avertissement, etc.
00:06:41 :Donc dans ce cas-ci on ne va pas mettre un message d'erreur,parce que ce n'est pas tant une erreur, mais c'est juste un avertissementpour dire qu'il n'y a plus d'image à convertir.
00:06:48 :Donc ça on va aller le récupérer dans qtwidgets.qmessagebox,donc la même classe que celle qu'on utilise pour faire notre MessageBox,et on va avoir une constante qui s'appelle warning,qui va nous permettre d'afficher une icône d'avertissement.
00:07:00 :On va donner ensuite le titre à ce MessageBox,donc on va dire par exemple aucune image à convertir,et ensuite on va mettre le texte qui est affiché dans le MessageBox.
00:07:11 :Donc je vais mettre « Toutes les images ont déjà été converties », par exemple.Comme ceci, et ça on va le récupérer à l'intérieur d'une variableque je vais appeler MessageBox, par exemple.
00:07:22 :Alors je vais juste décaler un petit peu ça pour que ce soit aligné.Voilà, comme ça.Donc on va récupérer ça dans une variable qu'on va appeler MessageBox,et on va ensuite exécuter ce MessageBox.
00:07:32 :Donc je fais MessageBox.exec avec un tiré du bas,puisque si vous vous souvenez bien, on en avait parlé dans une partie précédente,« exec », c'est un mot réservé en Python,donc pour pallier à ça, on met un tiré du bas.
00:07:43 :En fait, les gens qui ont créé PySide ont ajouté un tiré du bas dans cette méthodepour la distinguer de la méthode exec qui existe déjà avec Python.
00:07:51 :Donc ça, ça va nous permettre d'afficher notre MessageBox,et de l'afficher de façon modale.C'est-à-dire qu'on ne pourra pas accéder à l'interface derrière le MessageBoxtant qu'on n'aura pas validé le MessageBox.
00:08:02 :Si je mettais juste « show », par exemple, ça l'afficherait,mais on aurait encore accès à l'interface derrière.Donc moi, je veux juste bloquer ici l'interfacetant qu'on ne clique pas sur le bouton pour confirmer le MessageBox.
00:08:12 :Et à la fin de ça, je vais mettre un return false,puisque s'il n'y a aucune image à convertir,on veut juste arrêter la méthode convertImageset ne pas continuer avec le thread qui va commencer à convertir des images,puisqu'on n'a rien à convertir, donc on s'arrête ici.
00:08:27 :Donc je vais vérifier que ça fonctionne.Je vais laisser mon attribut ici à true,c'est-à-dire qu'on va considérer par défaut que toutes les images ont déjà été converties.
00:08:35 :Donc normalement, ici, je me retrouverais avec une liste vide.Donc la condition ici va être vérifiée et on va afficher le MessageBox.Donc je vais arrêter mon application et la relancer,et on va vérifier que ça fonctionne.
00:08:48 :Donc je prends mes images, je les glisse ici.Par défaut, on considère qu'elles sont toutes converties.Je clique sur le bouton et là, j'ai bien mon MessageBox qui apparaîtavec l'icône qui est automatiquement affichée.
00:08:57 :On n'a pas eu besoin d'aller chercher une icône là encore sur Internet ou quoi que ce soit.Vous voyez, il y a beaucoup de choses qui sont comme ça incluses dans PySide.
00:09:04 :Il faut juste les connaître.Et ça nous dit bien que toutes les images ont été converties.Je n'ai pas accès à mon interface derrière.Vous voyez, si j'essaie de cliquer sur le LineEdit ou sur les SpinBox, ça ne fonctionne pas.
00:09:14 :Il faut vraiment que je... soit que je ferme avec la petite croix ici,soit que j'appuie sur OK.Et une fois que je confirme, j'ai accès de nouveau à mon interface derrière.
00:09:22 :Donc voilà pour cette première partie.On a récupéré les variables dont on va avoir besoin pour la conversion.Pour l'instant, on ne les utilise pas.
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.