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

Python Discussion :

Le mystère du dimensionnement des Canvas


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut Le mystère du dimensionnement des Canvas
    Bonjour à tou(te)s,

    je me suis fait une petite appli avec Tkinter (grâce à vos réponses d'une précédente discussion) mais je tombe sur un nouveau mystère :

    Les Canvas ne semblent pas se dimensionner comme les autres widgets.
    Du coup, j'ai fait une version minimaliste de mon appli pour exposer mon mystère.

    Voici donc la GUI minimaliste telle que je la veux. Les widgets que j'utilise sont des Labels.
    Nom : tk.png
Affichages : 246
Taille : 16,8 Ko

    Et voici la même où les Labels sont remplacés par des Canvas.
    Nom : tk_2.png
Affichages : 232
Taille : 16,4 Ko
    C'est comme si les rowconfigure et columnconfigure n'avaient plus le même effet !

    Voici le code qui affiche les GUI ci dessus :
    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
    import Tkinter
     
    def TestGUI ( use_label ):
     
        def make_widget ( x,y,sx,sy,text ):
            color = '#%x%x%x'%( x*5+5,y*5+5,x*3+y*3+9 )
            if use_label :
                res = Tkinter.Label( main,bg=color,text=text )
            else:
                res = Tkinter.Canvas( main,bg=color,highlightthickness=0 )
                res.create_text( 30,10,text=text )
            res.grid( column=x,row=y,columnspan=sx,rowspan=sy,sticky=Tkinter.NSEW )
     
        root = Tkinter.Tk()
        root.geometry('700x500+10+10')
        root.bind('<Escape>',lambda e : root.quit())
        main = Tkinter.Frame( root )
        make_widget( 0,0 , 1,1 , 'zone 1' )
        make_widget( 1,0 , 1,1 , 'zone 2' )
        make_widget( 0,1 , 1,1 , 'zone 3' )
        make_widget( 1,1 , 1,2 , 'zone 4' )
        make_widget( 0,2 , 1,1 , 'zone 5' )
        make_widget( 2,0 , 1,3 , 'zone 6' )
        for i,w in enumerate(( 3,2,1 )) : main.rowconfigure   ( i,weight=w )
        for i,w in enumerate(( 9,3,1 )) : main.columnconfigure( i,weight=w )
        main.pack( fill=Tkinter.BOTH,expand=1 )
        root.focus_force()
        root.mainloop()
        root.destroy()
     
    TestGUI( 1 )
    TestGUI( 0 )
    Lancez là : vous voyez ma GUI telle que je la veux. Les widgets que j'utilise sont des Labels.
    Appuyez sur "Escape", et vous voyez la même où les Labels sont remplacés par des Canvas.

    Merci de vos conseils !

  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,

    Il n'y a pas de mystère!

    Lorsque les dimensions d'une fenêtre sont supérieures à celles des widgets qui sont dedans, les *configure(n , width="poids") répartissent l'espace restant suivant "poids".

    Dans le cas contraire, çà fait:
    ... For masters whose size is smaller than the requested layout, space is taken away from columns and rows according to their weights. However, once a column or row shrinks to its minsize, its weight is taken to be zero....
    (extrait de la documentationde l'algo. du grid)

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

  3. #3
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Merci wiztricks, même si je ne suis pas sûr d'avoir compris ton message...

    En tout cas, il m'a mis la puce à l'oreille, et j'ai résolu mon problème en ajoutant width=1,height=1 aux paramètres du constructeur de Canvas.


  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
    Citation Envoyé par Captain'Flam Voir le message
    Merci wiztricks, même si je ne suis pas sûr d'avoir compris ton message...
    La doc. dit que le poids sert non seulement à répartir l'espace restant mais aussi à réduire la taille des widgets lorsque cet espace n'est plus suffisant (pour contenir les différents widgets).

    Citation Envoyé par Captain'Flam Voir le message
    j'ai résolu mon problème en ajoutant width=1,height=1
    Avec width à 1 pixel, il y a des chances pour qu'on ait de l'espace à répartir...
    Le soucis est qu'un widget contiendra du texte ou des figures, si on veut voir ce qu'il y a dedans, width=1 est "petit".

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML] Dimensionnement des colonnes d'un tableau
    Par cchampion2fr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 09/11/2006, 16h04
  2. [SWING] Dimensionner des JInternalFrame
    Par rprom1 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/03/2006, 14h50
  3. Réponses: 3
    Dernier message: 06/03/2006, 18h08
  4. [LG] Dimensionnement des fenêtres text
    Par retniC dans le forum Langage
    Réponses: 4
    Dernier message: 28/10/2005, 13h30
  5. [C#] Probleme de dimensionnement des fenetres en MDI
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2004, 19h05

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