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 :

Positionnement par GRID()


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 103
    Points : 55
    Points
    55
    Par défaut Positionnement par GRID()
    Avé développeurs !!!

    nouveau avec l' outil, j' ai commencé par positionner mes objets avec "pack" que j' ai laissé finalement pour "grid". Quelqu' un peut-il me dire pourquoi les boutons ne se laisse pas placer par le code ci-dessous (on peut voir que je tente qques ajustements avec "sticky" mais ... rien à faire ??

    L' image ci-jointe montre le résultat et ce que j' attends ...

    NB: sur les canevas je fais "grid_propagate(0)" pour en fixer la taille, de manière à laisser les espaces que je veux entre les "widgets".

    MERCI !!
    Bye
    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
    from Tkinter import *  
     
    fen1=Tk()
    fen1.title("Recentrage des donnees")
     
    # Création des canevas
    can1 = Canvas(fen1,width =150, height=500, bg='green')
    can1.grid(row=1, column=1, padx=10, pady=10, rowspan=2)
    can1.grid_propagate(0)
     
    can2 = Canvas(fen1,width =350, height =300, bg='blue')
    can2.grid(row=1,column=2,padx=10, pady=10)
    can2.grid_propagate(0)
     
    can3 = Canvas(fen1,width =350, height =200, bg='black')
    can3.grid(row=2,column=2,padx=10, pady=10)
     
    # Les boutons et leur positionnement
     
    bou1 = Button(can1, text='Config' , width = 15, bd=4, command=())
    bou1.grid(sticky=N)
     
    bou21 = Button(can2, text='Config' , width = 15, bd=4, command=())
    bou21.grid(row=0, column=1, sticky=NW)
     
    bou22 = Button(can2, text='Config' , width = 15, bd=4, command=())
    bou22.grid(row=1, column=1)
     
    bou23 = Button(can2, text='Config' , width = 15, bd=4, command=())
    bou23.grid(row=2, column=1)
     
    fen1.mainloop()
    Images attachées Images attachées  

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 103
    Points : 55
    Points
    55
    Par défaut grid_propagate(0)
    Bonsoir,

    oublions le post précédent. Je ne comprends pas pourquoi la méthode .grid_propagate(0) ne marche pas "avec moi", ni sur des canvas ni sur des frames! Il est pourtant dit de partout que c' est ce qu' il faut faire pour éviter que le frame (dans mon exemple) ne se redimensionne à la taille des widgets contenus.

    Que faut-il donc faire pour avoir une fenêtre de taille définie, fixe, indépendante des boutons ou autres qu' elle contient ?

    MERCI BCP par avance.

    Ici fen1 = fenêtre root
    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
     
    ...
     
    frame1 = Frame (fen1, bg='light blue',width=480, height=480)
    frame1.grid_propagate(0)
    frame1.pack()
     
    bou1 = Button(frame1, text='selection du repertoire', width=20, bd=4, command=(lance_fileman_dir))
    bou1.pack(padx=10, pady=10)
     
    bou2 = Button(frame1, text='selection fichier', width=20, bd=4, command=(lance_fileman))
    bou2.pack(padx=10, pady=10)
     
    bou1 = Button(frame1, text='Exit', width=20, bd=4, command=fen1.quit)
    bou1.pack(side=BOTTOM, padx=10, pady=10)
    ...

  3. #3
    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
    salut,

    enleves de ton code.
    vois ce que ca donne!

    En effet dans ton code, tu utilise grid et pack sur frame1.
    grid est perdu au profit de pack, car pack est en dernier.
    a+

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 103
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par airod Voir le message
    salut,

    enleves de ton code.
    Salut,

    merci. J' avais essayé effectivement de rester avec une méthode homogène : grid, mais ca ne marche pas. Et d' ailleurs quel serait alors l' équivalent de grid.propagate(0) si l' on utilisait que des pack ou bien que des "place" ??

    J' ai joint 2 "snaps" pour illustrer ce que je veux. Le 1er étant ce que je veux obtenir, le 2d étant le résultat dès que je place un widget dans le grand cadre gris foncé. Comment éviter ca ?? ca reste le mystère Tkinter pour moi.

    MERCI BCP.
    Images attachées Images attachées   

  5. #5
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Il te manque une petite chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bou1 = Button(can1, text='Config' , width = 15, bd=4, command=())
    bou1.grid(row=0,column=0,sticky=N)
    can1.create_window(0, 0, anchor='nw', window=bou1)

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 103
    Points : 55
    Points
    55
    Par défaut
    Ahh ... merci !!!
    J' avais tout essayé ... sauf cà !!

    Bye

  7. #7
    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
    re,
    ci joint un code qui permet d'obtenir a peu prés ce que tu veux.
    a toi de compléter pour obtenir ce que tu veux réellement.

    il faut bien voir que tu obtiendra le résultat que tu veux en utilisant plusieur conteneur, les uns dans les autres.

    redondant, mais c'est possible.

    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
    import Tkinter as tk
     
    root=tk.Tk()
     
    frame1=tk.Frame(root,bg='black',width=200,height=300)
    frame1.pack(side='left')
    frame1.pack_propagate(0)
    frame2=tk.Frame(root,bg='white',width=300,height=300)
    frame2.pack(side='right')
    frame2.pack_propagate(0)
     
    frame3=tk.Frame(frame1,bg='black')
    frame3.pack(side='top')
     
    frame4=tk.Frame(frame1,bg='black')
    frame4.pack(side='top')
     
     
    frame5=tk.Frame(frame1,bg='black')
    frame5.pack(side='bottom')
     
     
     
     
    tk.Button(frame3,text='bouton 1',width=20).pack(padx=3,pady=3)
     
    tk.Button(frame4,text='bouton 2',width=20).pack(padx=3,pady=3)
    tk.Button(frame5,text='bouton 3',width=20).pack(padx=3,pady=3)
     
    tk.Button(frame2,text='bouton 4').pack(padx=3,pady=3)
     
    root.mainloop()
    frame5=tk.Frame(frame1,bg='black')
    frame5.pack(side='bottom')
     
     
     
     
    tk.Button(frame3,text='bouton 1',width=20).pack(padx=3,pady=3)
     
    tk.Button(frame4,text='bouton 2',width=20).pack(padx=3,pady=3)
    tk.Button(frame5,text='bouton 3',width=20).pack(padx=3,pady=3)
     
    tk.Button(frame2,text='bouton 4').pack(padx=3,pady=3)
     
    root.mainloop()
    Images attachées Images attachées  

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

Discussions similaires

  1. Fenetre positionnée par rapport à un contrôle
    Par distil dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 16/11/2009, 10h15
  2. Positionnement par rapport à la taille de l'élément parent
    Par punto dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/07/2009, 23h46
  3. positionner par defaut le dernier element de la liste
    Par monphp dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/05/2007, 14h57
  4. background positionné par rapport à l'écran et non au cadre
    Par muaddibx dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 30/03/2007, 11h48
  5. [TSynMemo] Positionnement par ligne et colonne
    Par Mercilius dans le forum Composants VCL
    Réponses: 9
    Dernier message: 16/04/2003, 16h22

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