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 :

ajouter des widgets dans des frames [Python 3.X]


Sujet :

Tkinter Python

  1. #21
    Invité
    Invité(e)
    Par défaut
    bonjour,

    Mon code très simple et redondant, mais là n'est pas l'exercice :

    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
     
    class Application(Frame):
        def __init__(self, master):
            Frame.__init__(self,master)
            self.grid()
            self.frameLeftTop()
            self.frameLeftBottom()
            self.frameRightTop()
            self.frameRightBottom()
     
        def frameLeftTop(self):
            self.leftTop = Frame(root,width=400,height=200,bg="red")
            self.leftTop.grid_propagate(0)
            self.leftTop.grid(row=0,column=0)
     
            self.label = Label(self.leftTop,text="Label 1")
            self.label.grid(row=0,column=0)
     
            self.query = Text(self.leftTop,height=4,wrap=WORD)
            self.query.grid(row=1,column=0)
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,bg="yellow")
            self.rightTop.grid_propagate(0)
            self.rightTop.grid(row=0, column=1)
     
            self.label = Label(self.rightTop,text="Label 2")
            self.label.grid(row=0,column=0)
     
            self.query = Text(self.rightTop,height=4,wrap=WORD)
            self.query.grid(row=1,column=0)
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,bg="green")
            self.leftBottom.grid_propagate(0)
            self.leftBottom.grid(row=1,column=0)
     
            self.label = Label(self.leftBottom,text="Label 3")
            self.label.grid(row=0,column=0)
     
            self.query = Text(self.leftBottom,height=4,wrap=WORD)
            self.query.grid(row=1,column=0)
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,bg="black")
            self.rightBottom.grid_propagate(0)
            self.rightBottom.grid(row=1,column=1)
     
            self.label = Label(self.rightBottom,text="Label 4")
            self.label.grid(row=0,column=0)
     
            self.query = Text(self.rightBottom,height=4,wrap=WORD)
            self.query.grid(row=1,column=0)
     
    root = Tk()
    root.title("Frames")
    root.resizable(width=False, height=False)
     
    w = 800
    h = 400
     
    ws = root.winfo_screenwidth()
    hs = root.winfo_screenheight()
    #calcul la position de la fenetre
    x = (ws/2) - (w/2)
    y = (hs/2) - (h/2)
     
    root.geometry('%dx%d+%d+%d' % (w, h, x, y))
    app = Application(root)
     
    root.mainloop()

    tout "fonctionne" mais j'indique que je souhaite les widgets Text() en position cardinal Sud, or ils ce placent sous mes Labels sans occuper toute la place(NEWS) de chaque Frame.
    Peut importe le sticky employé, mes Labels ne varie jamais d'e haut à droite (pour moi sans raison, puisque je ne leur indique rien il devrait être tout à gauche, par défaut non ?
    donc, oui je ne comprends pas le système des layouts sous python, et ce même avec un code simple très simple.

    Merci,
    Dernière modification par Invité ; 30/03/2017 à 13h24.

  2. #22
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par hyrule Voir le message
    Peut importe le sticky employé, mes Labels ne varie jamais d'e haut à droite (pour moi sans raison, puisque je ne leur indique rien il devrait être tout à gauche, par défaut non ?
    Comment çà sans raison? Python et tkinter ont toujours de bonnes raisons.

    La où çà peut paraître subtil, c'est quand vous utilisez un engin comme "grid" qui essaie de répartir l'espace disponible entre les différents widgets modulo les contraintes que vous lui donnez.

    Et si vous lui dites: je crée une Frame 400x200 que je ne veux pas que tu redimensionnes quelques soient les widgets que je vais placer dedans (.grid_propagate(0)), affiche un Label - qui à priori "rentre"- , puis un Text - qui ne rentre pas-,...
    Ben grid fait ce qu'il peut mais côté rendu, çà ne peut pas le faire.

    Citation Envoyé par hyrule Voir le message
    donc, oui je ne comprends pas le système des layouts sous python, et ce même avec un code simple très simple.
    Si vous lui demandez des choses impossibles, çà ne va pas souvent râler avec un message d'erreur. Çà considère que vous êtes un adulte responsable qui comprendra que lorsqu'on demande un peu n'importe quoi les résultats ne sont pas garantis.

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

  3. #23
    Invité
    Invité(e)
    Par défaut
    je ne comprends pas votre réponse très vague et flou.

    j'utilise pourtant (peut être à tort) un grid pour justement indiquer row 0 pour le Label et row 1 pour le second widget à savoir Text
    Je trouvais cela logique pour le comportement que je souhaitais.
    2 widgets 1 par ligne...

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par hyrule Voir le message
    j'utilise pourtant (peut être à tort) un grid pour justement indiquer row 0 pour le Label et row 1 pour le second widget à savoir Text
    Je trouvais cela logique pour le comportement que je souhaitais.
    2 widgets 1 par ligne...
    Il serait logique de constater que, par défaut, le widget Text se dimensionne pour afficher 24 lignes x 80 colonnes... ce qui va occuper un rectangle d'un certain nombre de pixels en hauteur x largeur... pas être facile de le placer dans un rectangle (la Frame) plus petit...
    Dit autrement, les lois de la physique s'imposent même pour des entités abstraites comme Frame, Text, ... et le comportement de grid peut paraître surprenant mais çà reste un algorithme.

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

  5. #25
    Invité
    Invité(e)
    Par défaut
    Bon je ne m'en sortirais pas, à vous lireje ne suis pas assez logique pour vous, clair et de plus ne vous donne pas assez de code à disposition.
    Visiblement j'en demande trop et ce sans faire le moindre effort...

    J’ai bien trouvé les sources de votre inspiration mais sans réelle réponse :
    http://www.java2s.com/Code/Python/GU...isedborder.htm

    Merci pour votre aide
    Dernière modification par Invité ; 31/03/2017 à 21h26.

  6. #26
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par hyrule Voir le message
    Bon je ne m'en sortirais pas, à vous lireje ne suis pas assez logique pour vous, clair et de plus ne vous donne pas assez de code à disposition.
    Visiblement j'en demande trop et ce sans faire le moindre effort..
    Lancer la console Python et de tester un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import tkinter as tk
    >>> root = tk.Tk()
    >>> frame = tk.Frame(root, width=200, height=200, bg='grey')
    >>> frame.pack()
    >>> frame.grid_propagate(0)
    >>> label = tk.Label(frame, text='foo')
    >>> label.grid()
    Puis ajouter un widget Text avec un width par défaut à 80:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> text = tk.Text(frame, height=4)
    >>> text.grid()
    On doit voir une bande blanche et le Label aura certainement disparu.
    Puis on recommence avec un width plus petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> text.grid_forget()
    >>> text.configure(width=40)
    >>> text.grid()
    Là on devrait voir apparaître le Label un peu sur la droite comme dans votre exemple.
    Puis on recommence avec un width encore plus petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> text.grid_forget()
    >>> text.configure(width=20)
    >>> text.grid()
    Et on essaie de voir si c'est cohérent avec ce que raconte l'algorithme.

    Commencer par des petits essais, confronter le résultat obtenu avec ce que raconte la documentation, ... c'est par là que passe essayer de comprendre.
    Et désolé, outre que je ne trouve pas cela "compliqué"... comment faire autrement?

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

  7. #27
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je ne répondais plus, car je suis tout simplement dégoutté.
    La joie des forums en somme.
    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/03/2017, 09h01
  2. Réponses: 1
    Dernier message: 20/09/2016, 22h09
  3. [Python 2.X] Alignement des widgets dans des frames
    Par Shozma dans le forum Tkinter
    Réponses: 2
    Dernier message: 02/06/2016, 15h52
  4. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 16h26

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