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 :

Masquer/Ne pas afficher le canvas


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 35
    Points
    35
    Par défaut Masquer/Ne pas afficher le canvas
    Hello,

    Je souhaite masquer mon canvas/display. En fait, pour situer le contexte, je cree un graphique puis je le convertis en .ps pour le sauvergarder.
    A l'heure actuelle, le graphique s'affiche puis et fermé. (root.update, root.destroy)

    Il est donc possible de voir apparaitre à l'ecran cette ouverture et fermeture de fenetre. J'aimerai que tout ceci reste transparent et passe totalement inapercu.

    Connaissez vous donc une commande permettant de masquer le canvas, tout en lui permettant de rester à jour pour etre sauvergardé en .ps?

    Merci.

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour,
    si tu travail avec tkinter, essaie la fonction
    withdraw(). je crois que ca masque le composant.

    ++

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    withdraw sert à masquer les fenêtres, soit les objets Tk() et Toplevel(). La fenêtre sera toujours présente, mais réduite.

    Si tu veux juste masquer le canevas comme le suggère le titre du topic, je te propose plus simple : il suffit de ne pas l'afficher tout simplement !
    Je veux dire, n'applique pas les méthodes de placement qui permettent d'afficher le widget, donc pas de pack(), grid() ou encore place().
    <3 Debian
    [ C | C++ | PHP | Python ]

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Si c'est pas withdraw, ca doit être grid_forget() comme méthode pour faire disparaitre un widget. (ou pack_forget() ou place_forget())

    voici un exemple :
    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
    import Tkinter
     
     
    def change(bouton):
        global root
        if bouton==2:
            b1.grid_forget()
            b2.grid()
        else:
            b2.grid_forget()
            b1.grid()
        root.update()
     
    root=Tkinter.Tk()
    b1=Tkinter.Button(root,text="B1")
    b2=Tkinter.Button(root,text="B2")
    b2.grid()
    b2["command"]=lambda b=1:change(b)
    b1["command"]=lambda b=2:change(b)
     
    root.mainloop()

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Non, ce n'est pas nécessaire.

    Les méthodes *_forget() servent à masquer un widget qui a déjà été affiché. Comme je l'ai dit dans mon premier message, il suffit simplement de ne pas l'afficher.

    La création d'un widget et son affichage sont deux choses indépendantes, on peut très bien créer un canevas, y tracer des courbes, faire des graphiques, etc, sans l'afficher pour autant.
    Le canevas et ses éléments sont bel et bien présents dans l'application, c'est juste qu'ils ne sont pas visibles pour l'utilisateur.
    <3 Debian
    [ C | C++ | PHP | Python ]

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Apparement ça marche pas !!
    J'ai essayé : withdraw(), grid_forget()

    Ca ne marche pas:

    J'envoie mon code, si quelqu'un peut m'aider !!


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    #-*- coding: latin-1 -*-
    from Tkinter import *
    import Pmw
     
    def ajout():
        "Création d'une frame pour introduire les valeurs"
        Intro=Frame(crm,relief=FLAT)
        Intro.grid(row=10,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
        #Création des labels dans zones d'entrée:
     
        ncpt=Label(Intro,text="Numéro de compte : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        ncpt.grid(row=1,column=1,padx=12,pady=15,sticky=W)
        lib=Label(Intro,text="Libellé : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        lib.grid(row=1,column=2,padx=12,pady=15,sticky=W)
        sld=Label(Intro,text="Soldes : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        sld.grid(row=1,column=3,padx=12,pady=15,sticky=W)
     
        #Création des zones d'entrée
     
        # Zone d'entrée de date limitée à 15 caractères:
        Lg=StringVar
        entrncpt=Entry(Intro,textvariable=Lg,width=15,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrncpt.grid(row=2,column=1,sticky=W,padx=12,pady=15)
     
        # Zone d'entrée du libellé
        Lg=StringVar
        entrlib=Entry(Intro,textvariable=Lg,width=50,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrlib.grid(row=2,column=2,sticky=W,padx=12,pady=15)
     
        # Zone d'entrée du solde
        Lg=StringVar
        entrsld=Entry(Intro,textvariable=Lg,width=10,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrsld.grid(row=2,column=3,sticky=W,padx=12,pady=15)
     
        # Création d'une Frame pour les boutons d'ajout
     
        aj=Frame(Intro,relief=FLAT)
        aj.grid(row=3,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
        # Création des boutons nécessaire à un ajout
        bouA1=Button(aj,text="Confirmer",command="")
        bouA1.grid(row=3,column=1,sticky=W,padx=12,pady=15)
     
        bouA2=Button(aj,text="Annuler",command="")
        bouA2.grid(row=3,column=2,sticky=W,padx=12,pady=15)
     
        bouA3=Button(aj,text="Fin ajout",command=retourdep)
        bouA3.grid(row=3,column=3,sticky=W,padx=12,pady=15)
     
    def modif():
     
        "Création d'une frame pour introduire les valeurs"
        Mod=Frame(crm,relief=FLAT)
        Mod.grid(row=10,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
        #Création des labels dans zones d'entrée:
     
        ncpt=Label(Mod,text="Numéro de compte : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        ncpt.grid(row=1,column=1,padx=12,pady=15,sticky=W)
        lib=Label(Mod,text="Libellé : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        lib.grid(row=1,column=2,padx=12,pady=15,sticky=W)
        sld=Label(Mod,text="Soldes : ",fg='blue',font=("Times new roman",14,"bold",'underline'))
        sld.grid(row=1,column=3,padx=12,pady=15,sticky=W)
     
        #Création des zones d'entrée
     
        # Zone d'entrée de date limitée à 15 caractères:
        Lg=StringVar
        entrncpt=Entry(Mod,textvariable=Lg,width=15,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrncpt.grid(row=2,column=1,sticky=W,padx=12,pady=15)
     
        # Zone d'entrée du libellé
        Lg=StringVar
        entrlib=Entry(Mod,textvariable=Lg,width=50,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrlib.grid(row=2,column=2,sticky=W,padx=12,pady=15)
     
        # Zone d'entrée du solde
        Lg=StringVar
        entrsld=Entry(Mod,textvariable=Lg,width=10,fg='blue',
                       font=("Times new roman",12,"bold"))
        entrsld.grid(row=2,column=3,sticky=W,padx=12,pady=15)
     
        # Création d'une Frame pour les boutons des modifs
        Modif=Frame(Mod,relief=FLAT)
        Modif.grid(row=3,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
        # Création des boutons nécessaire à un ajout
        bouM1=Button(Modif,text="Confirmer",command="")
        bouM1.grid(row=3,column=1,sticky=W,padx=12,pady=15)
     
        bouM2=Button(Modif,text="Annuler",command="")
        bouM2.grid(row=3,column=2,sticky=W,padx=12,pady=15)
     
        bouM3=Button(Modif,text="Supprimer la ligne",command="")
        bouM3.grid(row=3,column=3,sticky=W,padx=12,pady=15)
     
        bouM4=Button(Modif,text="Fin modification",command=retourdep)
        bouM4.grid(row=3,column=4,sticky=W,padx=12,pady=15)
     
    def retourdep():
        # suppression des frames précédente
        #mod.about.withdraw()
        #mod.grid_forget()
        #mod.grid()
        #crm.update
     
        #Création d'une frame uniquement pour visualisation:
        visu=Frame(crm,relief=FLAT)
        visu.grid(row=10,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
        bouL1=Button(visu,text="Ajout",command=ajout)
        bouL1.grid(row=10,column=1,padx=12,pady=15,sticky=W)
     
        bouL2=Button(visu,text="Modifier",command=modif)
        bouL2.grid(row=10,column=2,padx=12,pady=15,sticky=W)
     
        bouL3=Button(visu,text="Tout Supprimer",command="")
        bouL3.grid(row=10,column=3,padx=12,pady=15,sticky=W)
     
        bou4=Button(visu,text="Fin",command=quit)
        bou4.grid(row=10,column=4,padx=12,pady=15,sticky=W)
     
    #### Programme principal ####
     
    crm=Pmw.initialise()
    crm.title("Comptes rarement modifiés")
     
    lstNumCpt=Pmw.ScrolledListBox(crm,labelpos=N,scrollmargin=2,
                              label_text="Numéros de comptes : ",
                              label_font="Helvetica 12 bold underline",
                              label_fg='blue',label_pady=15,
                              items="",
                              usehullsize=1,
                              hull_width=180,hull_height=250)
     
    lstNumCpt.grid(row=1,column=1,padx=12,pady=15,sticky=W)
     
     
    lstLib=Pmw.ScrolledListBox(crm,labelpos=N,scrollmargin=2,
                               label_text="Libellés:",
                               label_font="Helvetica 12 bold underline",
                               label_fg='blue',label_pady=15,
                               items="",
                               usehullsize=1,
                               hull_width =500,hull_height=250)
     
    lstLib.grid(row=1,column=2,padx=12,pady=15,sticky=W)
    lstsld=Pmw.ScrolledListBox(crm,labelpos=N,scrollmargin=2,
                               label_text="Soldes : ",
                               label_font="Helvetica 12 bold underline",
                               label_fg='blue',label_pady=15,
                               items="",
                               usehullsize=1,
                               hull_width=100,hull_height=250)
     
    lstsld.grid(row=1,column=3,padx=12,pady=15,sticky=W)
     
    #Création d'une frame uniquement pour visualisation:
    visu=Frame(crm,relief=FLAT)
    visu.grid(row=10,column=1,padx=12,pady=15,sticky=W,columnspan=3)
     
    bouL1=Button(visu,text="Ajout",command=ajout)
    bouL1.grid(row=10,column=1,padx=12,pady=15,sticky=W)
     
    bouL2=Button(visu,text="Modifier",command=modif)
    bouL2.grid(row=10,column=2,padx=12,pady=15,sticky=W)
     
    bouL3=Button(visu,text="Tout Supprimer",command="")
    bouL3.grid(row=10,column=3,padx=12,pady=15,sticky=W)
     
    bou4=Button(visu,text="Fin",command=quit)
    bou4.grid(row=10,column=4,padx=12,pady=15,sticky=W)
     
    crm.mainloop()
    En espérant trouver une solution
    D'avance merci

    André

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Haze. Voir le message
    Non, ce n'est pas nécessaire.

    Les méthodes *_forget() servent à masquer un widget qui a déjà été affiché. Comme je l'ai dit dans mon premier message, il suffit simplement de ne pas l'afficher.

    La création d'un widget et son affichage sont deux choses indépendantes, on peut très bien créer un canevas, y tracer des courbes, faire des graphiques, etc, sans l'afficher pour autant.
    Le canevas et ses éléments sont bel et bien présents dans l'application, c'est juste qu'ils ne sont pas visibles pour l'utilisateur.

    En effet, ta remarque était bonne concernant le discernement entre affichage et contenu en lui même du canvas.

    La problème principal du non affichage du canvas (qui est cependant bel et bien mon but), réside dans le fait qu'ImageGrab devient alors inutile pour récuperer le graphique tracé dans le canvas....puisque ImageGrab se contente de réaliser une capture d'écran et ne va pas chercher le contenu du canvas.

    Connais tu donc une possibilité de sauvegarder le contenu du canvas en .png directement? (arf...j'espère avoir à éviter de repasser les les fichiers.ps...)

Discussions similaires

  1. afficher/masquer fonctionne pas sous firefox
    Par tucdual dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/10/2010, 06h08
  2. Réponses: 5
    Dernier message: 02/08/2004, 17h11
  3. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40
  4. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01
  5. Réponses: 6
    Dernier message: 10/09/2002, 03h35

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