- 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
12 janvier 2023 - 12 janvier 2023 à 15:03
checkConversation résolue
0 réponses
Le TaskItem ne change pas de taille
J'ai le même code que toi mais les items font toujours la taille par défautMa methode get_tasks de MainWindow :def get_tasks(self): logging.debug("get_tasks()") self.lw_tasks.clear() tasks = task.get_tasks() for task_name, done in …
00:00:00 :Pour l'instant, dans notre méthode getTask, quand on ajoute les tâches à notre liste widget,on utilise tout simplement la méthode addItem.Ça ne nous laisse pas beaucoup de latitude pour faire quelque chose d'un peu plus personnalisé.
00:00:11 :Par exemple, j'aimerais bien pouvoir changer la couleur d'arrière-plan de cet item,changer sa taille en hauteur, etc.En passant par addItem, on n'a aucune latitude.
00:00:20 :Ce que je vais faire, c'est que je vais créer ma propre classe qui va hériter de QListWidgetItem.QListWidgetItem, c'est un élément que l'on peut ajouter à l'intérieur d'un liste widget.
00:00:30 :Je vais créer cette classe ici, avant ma classe MainWindow.On va la créer dans le même fichier, ça n'a pas vraiment d'importance.On pourrait séparer ça dans un autre fichier si on voulait, mais là on a une seule classe,donc je vais la mettre dans le même fichier.
00:00:41 :Je vais l'appeler tout simplement TaskItem, et elle va hériter de QtWidget.QListWidgetItem.Comme ça, on va pouvoir avoir accès à toutes les méthodes de QListWidgetItem.Je vais faire la méthode init, et on va appeler super pour appeler la méthode init de notre QListWidgetItem.
00:00:59 :On va lui passer le nom de la tâche.On va avoir un premier paramètre qui va s'appeler name,et ce paramètre, on va l'envoyer également à la méthode init de notre QListWidgetItem.
00:01:09 :Quand on fait un liste widget item, je vais vous faire un petit exemple ici.Si je fais un liste widget item comme ceci, à partir de QListWidget,on lui passe en premier argument ici le texte que l'on veut mettre à l'intérieur du QListWidgetItem.
00:01:23 :Donc si je veux mettre bonjour, je vais mettre bonjour en chaîne de caractère ici.Là, on va faire la même chose, sauf que plutôt que de passer par QtWidget.QListWidgetItem,
00:01:30 :on va faire TaskItem, et on va lui passer le texte qu'on veut afficher.Ce texte, on va l'envoyer dans le paramètre name,et pour que ça soit répercuté à l'intérieur de notre QListWidgetItem comme on le fait ici,il faut l'envoyer à notre méthode init de super,puisque super va appeler la méthode init de QListWidgetItem,
00:01:48 :et lui envoyer le nom que l'on met dans le QListWidgetItem.Donc on envoie ça à notre méthode init, et on va également envoyer deux autres paramètres ici.
00:01:57 :Le premier, ça va être si la tâche a été complétée ou non,donc on va mettre un paramètre que je vais appeler done,donc ça va être un booléen, soit true soit false, en fonction de si la tâche a été complétée ou non.
00:02:07 :Et la dernière chose qu'on va donner, c'est le liste widget,donc ça va être dans ce cas-ci notre liste widget task, ici, qu'on a créé,qui va nous permettre de le récupérer à l'intérieur de cet item,et d'ajouter cet item automatiquement à l'intérieur de notre liste.
00:02:19 :Donc on va récupérer tout ça dans des attributs à l'intérieur de notre méthode init,donc on va faire un premier attribut que je vais appeler liste widget,qui va être égal à mon liste widget,on va faire un attribut done qui va être égal à done,et un attribut name qui va être égal à name, tout simplement,
00:02:33 :puisqu'on va réutiliser ces attributs dans une autre méthode qu'on créera par la suite,qui va permettre de changer le statut de la tâche,et qui va également nous permettre de changer la couleur d'arrière-plan.
00:02:42 :On va ajouter cet item directement dans la méthode init à notre liste widget,donc on va faire self.listewidget.addItem,et on va ajouter self, puisque self c'est notre liste widget item.
00:02:53 :Donc on l'ajoute lui-même à l'intérieur de la liste que l'on a récupérée dans cet attributque l'on a passé en argument quand on va initialiser une instance de notre task item.
00:03:03 :Donc on l'ajoute dans la liste, et la dernière chose à faire juste avant ça,c'est de changer la taille de la tâche,puisque pour l'instant, si je lance mon script,vous allez voir, quand on a les tâches ici, c'est un peu petit,on a vraiment juste une ligne qui est aussi haute que le texte qui est affiché,
00:03:18 :donc moi j'aimerais bien avoir un peu plus d'espace entre chaque élément,et donc que les éléments dans ma liste soient un peu plus grands en hauteur.
00:03:25 :Donc pour ça on va utiliser ce qu'on appelle le sizeHint,donc le sizeHint c'est la taille de votre item,et on va pouvoir la changer avec setSizeHint,donc c'est une méthode qui me permet de changer la taille de mon élément.
00:03:37 :Cette méthode, on va devoir lui donner un QtCore.QSize,alors on va devoir importer QtCore, puisque pour l'instant il n'est pas dans mon script,donc j'importe QtCore ici à côté de QtWidgets,et on va créer un QtCore.QSize.
00:03:50 :La première chose qu'on va récupérer, c'est d'abord la largeur de notre item,puisque la largeur on ne veut pas y toucher,on veut récupérer la même largeur que celle qu'on a actuellement,donc pour ça on va aller la récupérer à partir de sizeHint cette fois-ci.
00:04:02 :Donc sizeHint ça permet de récupérer la taille de basequi a été calculée automatiquement par Qt de notre item.Pour l'instant cette taille ça va être une largeur et une hauteur,nous on veut juste récupérer la largeur,donc on va faire .width pour récupérer la largeur.
00:04:15 :Et en deuxième argument ici je vais spécifier la hauteur,donc je pourrais faire la même chose qu'ici,c'est-à-dire prendre la hauteur comme ceci,mais là on ne change absolument rien,puisqu'on fait juste récupérer la largeur et la hauteurqui ont été automatiquement calculées par Qt.
00:04:28 :Donc ça ne sert à rien, moi ce que je veux icic'est pas mettre la hauteur qui a été calculée par Qt,mais mettre une hauteur personnalisée.
00:04:35 :Donc je vais mettre 50 par exemple,et si on lance on va voir que cette fois-ci,alors là non puisque je n'ai pas encore ajouté mon item,là on est encore avec le ListWidgetItem,donc je vais aller modifier ça ici dans GetTask,plutôt que d'utiliser AddItem on va ajouter notre item,
00:04:50 :en fait on va créer une instance de notre item.Donc on va faire TaskItem,on va lui passer comme nom le TaskName,le TaskName qu'on a récupéré ici,donc ça va être le nom de la tâche,on va lui passer Done,donc est-ce que la tâche est complétée ou non,
00:05:04 :et on va lui passer notre ListWidget,donc qui est égal à ListWidgetTask.Donc là normalement si je relance mon script,on devrait cette fois-ci passer par notre classe,et vous voyez que la taille de nos itemsest maintenant beaucoup plus importante.
00:05:17 :Donc ça permet d'avoir quelque chose qui respire un peu plus,et vous voyez qu'on n'a pas besoin de récupérer notre instancedans une variable, puisqu'on fait justecréer notre TaskItem, et automatiquementdans la méthode Init de ce TaskItem,on ajoute cet item à l'intérieur de notre liste.
00:05:31 :Donc ça fonctionne parfaitement comme ça,on pourrait aussi choisir de le faire en dehors de la classe,donc par exemple je pourrais enlever ça ici,et directement dans ma méthode GetTask,récupérer mon item, et l'ajouter ensuite à ce niveau-là.
00:05:43 :Donc faire AddItem de ma variable ici que j'ai récupérée,donc mon instance de TaskItem.Ça marche aussi comme ça, si je lance mon script,on a exactement le même processus qui fonctionne,moi je préfère le faire ici directementà l'intérieur de ma méthode Init,et de toute façon on va réutiliser cette ListWidget
00:06:00 :pour changer le style de notre ListWidgetItemdans une autre méthode qu'on va faire dans les prochaines parties,donc j'ai besoin de récupérer, quoi qu'il en soit,ma ListWidget à l'intérieur de cette classe.
00:06:11 :Donc c'est pour ça que, tant qu'à faire,j'ajoute l'item directement ici.Donc voilà pour cette partie,qui nous permet de commencer la créationde notre ListWidgetItem personnalisé,et dans les prochaines parties, on va voir comment cette fois-cichanger la couleur de notre tâche,comment permettre à l'utilisateurde changer le statut de la tâche,
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.