IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Canvas : supprimer, oui, mais ne supprimer que les widgets !


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Falenn
    Femme Profil pro
    Prise de tête
    Inscrit en
    Mars 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Prise de tête

    Informations forums :
    Inscription : Mars 2021
    Messages : 18
    Par défaut Canvas : supprimer, oui, mais ne supprimer que les widgets !
    Chalut ...

    Petit problème du jour : Comment supprimer des widgets dans un canvas qui contient des items (create_...) qu'il ne faut pas supprimer ?
    La difficulté : les widgets ne sont pas nommés.

    J'ai essayé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    # python 3.7.7
    import tkinter as tk
    from tkinter import *
    #
    def lbl_del():
        lst = cnv2.children
        print (lst)
        #for wdgt in lst : wdgt.destroy()
        lst.clear()
        print(lst)
        #cnv2.update()    
        Button(cnv2,text="détruire les labels",bg="red",fg="white",command=lbl_del).place(x = 850, y = 50)
    #            
    root = Tk()
    cnv2 = Canvas(root, width = 1000, height = 500)
    cnv2.pack()
    Button(cnv2,text="détruire les labels",bg="red",fg="white",command=lbl_del).place(x = 850, y = 50)
    cnv2.create_oval(400,200,600,300)
    n = 0
    while n < 3 :
        py = 208+30*n
        Label(cnv2,text="label à détruire").place(x = 455, y = py)
        n = n+1
    root.mainloop()
    Les widgets sont bien supprimés du dictionnaire "lst", mais pas effacés de l'écran. POURQUOI ?!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Un widget n'est détruit que si on lui applique la méthode .destroy() (pour ne plus l'afficher .place_forget() devrait suffire).

    Les développeurs auraient pu forcer la destruction d'un widget qui n'a plus de référence.
    C'est donc un choix d'implémentation avec lequel il faut faire avec.

    Pour placer des widgets dans un Canvas, la méthode est plutôt .create_window.
    Comme ça crée un item du Canvas auquel on peut associer un tag...

    tkinter est assez compliqué. Ouvrir la documentation, trouver un tuto. et y passer du temps pour comprendre comment l'utiliser plutôt que de constater que ce n'est pas instinctif de programmer avec...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti Avatar de Falenn
    Femme Profil pro
    Prise de tête
    Inscrit en
    Mars 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Prise de tête

    Informations forums :
    Inscription : Mars 2021
    Messages : 18
    Par défaut
    Il s'agit de labels "image" ... puisqu'il faut créer ces trucs pour pouvoir rajouter d'autres images.

    La classe Tkinter PhotoImage reconnaît les images GIF et PPM. Le fait qu'elle soit utilisée comme option de configuration image d'un widget ne suffit pas à maintenir une instance PhotoImage en vie. Il faut donc s'assurer de conserver ces instances dans un objet conteneur de Python;
    puis

    si vous voulez afficher une image autre que GIF ou PPM, il vous faudra passer par la bibliothèque PIL qui est capable de lire tout type d'images. Il faudra également conserver l'image dans un objet conteneur Python pour les mêmes raisons que précedemment.
    Je voudrais donc supprimer ces labels "image" lorsque les images sont supprimées.
    Même si, à la création, ces labels sont invisibles (forget), ils doivent utiliser de la mémoire, d'où mon questionnement.
    Merci.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Falenn Voir le message
    Il s'agit de labels "image" ... puisqu'il faut créer ces trucs pour pouvoir rajouter d'autres images.
    Il n'y a pas d'image dans le premier code que vous avez posté...

    Pourquoi passer par un Label pour afficher une image dans un Canvas? .create_image suffit.

    Pour le reste, je ne sais quoi dire! Vous mélangez tout ou vous utilisez une massue pour écraser une mouche?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2016, 23h59
  2. Réponses: 1
    Dernier message: 11/05/2016, 16h25
  3. Supprimer les insultes dans un texte oui mais...
    Par psychoBob dans le forum Langage
    Réponses: 19
    Dernier message: 16/04/2008, 15h03
  4. Réponses: 4
    Dernier message: 24/09/2004, 10h17
  5. [Tomcat] Comment supprimer tous les logs ?
    Par Soulsurfer dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 11/05/2004, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo