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. #1
    Invité
    Invité(e)
    Par défaut ajouter des widgets dans des frames
    Bonjour,

    j'aimerais comprendre pourquoi je ne peux pas rajouter des widgets (Label, Text etc) dans différentes Frames que composent ma fenêtre principale.

    Voici mon code très simple, vous y verrez mes tentatives d'ajout d'un simple label, j'ai d'abord utilisé les points cardinaux, puis ici, les rows/column, mais sans succès :
    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
     
    from tkinter import *
     
    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,pady=5,bg="red").grid(row=0, column=0)
            Label(self.leftTop,text="Label 1").grid(row=0, column=0,sticky="wn")
            Text(self.leftTop,height=6,width=40).grid(row=1,column=0,sticky="wn")
            Button(self.leftTop,text="Exécuter",width=50,bg="white").grid(row=2,column=0,sticky="wn")
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,pady=5,bg="green").grid(row=1, column=0)
            Label(self.leftBottom,text="Label 2").grid(row=1, column=0,sticky="n")
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,pady=5,bg="yellow").grid(row=0, column=1)
            Label(self.rightTop,text="Label 3").grid(row=0, column=1,sticky="n")
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,pady=5,bg="black").grid(row=1, column=1)
            Label(self.rightBottom,text="Label 4").grid(row=1, column=1,sticky="n")
     
    root = Tk()
    root.title("Frames")
    root.geometry("800x400")
    app = Application(root)
     
    root.mainloop()
    Je ne comprends pas le comportement des rows,columns. Mes labels devraient se situer en row=0 et column=0 de CHAQUE Frame mais visiblement elles se comportent comme si je les plaçaient dans la fenêtre principale :
    comme suit tout marche, mais utilise le conteneur principal du coup et plus mes Frames de "sous divisions" :
    row=0, column=0
    row=1, column=0
    row=0, column=1
    row=1, column=1

    les Frames ne sont elles pas des conteneurs à part entière tout comme root = Tk() ?
    en somme je voudrais des boites dans une boite, et y placer mes widgets à l’intérieur...

    Merci à tous.
    Dernière modification par Invité ; 26/03/2017 à 12h06.

  2. #2
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       def frameLeftTop(self):
            self.leftTop = Frame(root,width=400,height=200,pady=5,bg="red").grid(row=0, column=0)
            Label(self.leftTop,text="Label 1").grid(row=0, column=0,sticky="wn")
            Text(self.leftTop,height=6,width=40).grid(row=1,column=0,sticky="wn")
            Button(self.leftTop,text="Exécuter",width=50,bg="white").grid(row=2,column=0,sticky="wn")
    et que çà ne fait pas ce qui est attendu, la première chose à faire est de vérifier que çà se passe bien comme vous le pensez. Par exemple, en ajoutant, un "print" pour vérifier que self.leftTop est bien une instance de Frame...

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Objet ou procédural cela ne fonctionne pas...

    Si je poste c'est justement pour comprendre et je ne vois pas où vous voulez en venir !

    Dommage, qu'on réponde à ma question par une autre question, mais bon...

    Bref, l'instance "print(self.leftTop)" est "none" donc oui, elle n'existe pas.
    Je ne vois toujours pas comment procéder, puisque avec ou sans classe cela ne fait pas le boulot.

    De plus, leftTop est none ok, mais mes labels s’affichent bien, d'où mon incompréhension pour l'ajout d'autres widgets qui eux ne se comportent pas comme j’aimerais (positionnement pas là où je le souhaiterais.)

    je pense faire un minimum de recherches et d'explications pour décrire mon souci. Je ne demande pas du tout cuit, j'ai codé et présenté ma démarche.

    Merci de votre aide
    Dernière modification par Invité ; 26/03/2017 à 19h02.

  4. #4
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hyrule Voir le message
    Dommage, qu'on réponde à ma question par une autre question, mais bon, l'instance "print(self.leftTop)" est "none" donc oui, elle n'existe pas.
    Si self.leftTop est None, le .grid s'appliquera par défaut à la fenêtre principale.
    Jusque là ça fonctionne comme attendu.
    Après la question est dans le raccourci Frame().grid() qui retourne None, ce qui est dommage car vous avez besoin d'une instance de Frame... et donc impossible de prendre un tel raccourci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> frame = Frame()
    >>> print(frame)
    .53333520
    là j'ai ma Frame...
    puis frame.grid().
    Citation Envoyé par hyrule Voir le message
    Si je poste c'est justement pour comprendre et je ne vois pas où vous voulez en venir !

    Dommage, qu'on réponde à ma question par une autre question, mais bon...
    C'est vous qui devez questionner votre code et essayer d'y répondre en vous assurant que ce que vous avez écrit fait bien ce que vous pensez... Et pour çà "print" est l'instruction magique que vous devez apprendre à utiliser.

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

  5. #5
    Invité
    Invité(e)
    Par défaut
    je vois l'erreur concernant mes "raccourcis"

    Mais visiblement je ne comprends toujours pas :

    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
     
        def frameLeftTop(self):
            self.leftTop = Frame(root,width=400,height=200,pady=5,bg="red")
            self.leftTop.grid(row=0,column=0,sticky="n")
     
            self.label1 = Label(self.leftTop,text="Label 1")  
            self.label1.grid(row=0,column=0,sticky="n")
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,bg="green")
            self.leftBottom.grid(row=1,column=0,sticky="n")
     
            self.label2 = Label(self.leftBottom,text="Label 2")
            self.label2.grid(row=0,column=0,sticky="n")
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,bg="yellow")
            self.rightTop.grid(row=0, column=1,sticky="n")
     
            self.label3 = Label(self.rightTop,text="Label 3")
            self.label3.grid(row=0,column=0,sticky="n")
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,bg="black")
            self.rightBottom.grid(row=1,column=1,sticky="n")
     
            self.label4 = Label(self.rightBottom,text="Label 4")
            self.label4.grid(row=0,column=0,sticky="n")

    Mes Frames ne sont plus une dans chaque coin, avec un label dans chaque Frame, mais cette fois mes Labels sont bien là...

    je comprends votre démarche, je débug, mais sans comprendre j'ai beau le faire encore et encore, à un moment donné il faut bien de l'aide, non ? ou tout doit être inné ?! partage/forum...

  6. #6
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hyrule Voir le message
    je vois l'erreur concernant mes "raccourcis"

    Mais visiblement je ne comprends toujours pas :
    ...
    Mes Frames ne sont plus une dans chaque coin, avec un label dans chaque Frame, mais cette fois mes Labels sont bien là...
    Votre question/problème de départ est résolu... et je ne comprends pas ce que vous ne comprenez pas.

    Citation Envoyé par hyrule Voir le message
    je comprends votre démarche, je débug, mais sans comprendre j'ai beau le faire encore et encore, à un moment donné il faut bien de l'aide, non ? ou tout doit être inné ?! partage/forum...
    Ben imaginez cuisiner un plat en vous appliquant à suivre une recette.
    Si çà dit "ajouter du sel" et que vous ajoutez un truc qui y ressemble vaguement (du sucre...) votre plat ne sera pas forcément dégueulasse mais ne ressemblera pas à ce que vous espériez.
    Est-il inné d'avoir un minimum de rigueur et de faire attention à ce qu'on fait? Certainement pas.
    Mais c'est une qualité que vous devez cultiver pour programmer, cuisiner,... et si en cuisine on peut "goûter" le sel, le sucre,... en programmation on vérifie qu'on passe bien le type de paramètre attendu et on s'y applique car Python étant un langage interprété prendra tout ce qu'il peut.

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

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pour rester dans le sujet, cela ne fonctionne toujours pas, même souci qu'au début.
    Je n'arrive pas à ajouter des widgets (label, Text etc) dans les différentes Frames créer.

    Comme déjà dis, j'ai ce code qui fonctionne: (avec ma correction due à votre explication)

    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
     
    from tkinter import *
     
    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(row=0,column=0,sticky="wesn")
            # ICI RAJOUT D'UN LABEL
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,bg="green")
            self.leftBottom.grid(row=1,column=0,sticky="wesn")
            # ICI RAJOUT D'UN LABEL
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,bg="yellow")
            self.rightTop.grid(row=0, column=1,sticky="wesn")
            # ICI RAJOUT D'UN LABEL
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,bg="black")
            self.rightBottom.grid(row=1,column=1,sticky="wesn")
            # ICI RAJOUT D'UN LABEL
     
    root = Tk()
    root.title("Frames")
    root.geometry("800x400")
    app = Application(root)
     
    root.mainloop()
    Mais une fois que je souhaite rajouter à chaque Frames un widget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        def frameLeftTop(self):
            self.leftTop = Frame(root,width=400,height=200,bg="red")
            self.leftTop.grid(row=0,column=0,sticky="wesn")
            label = Label(self.leftTop ,text="Label 1")
            label.grid(row=0,column=0,sticky="n")
    Mes labels ne sont plus dans les Frames et ces dernières ne sont pas dans la fenêtre principale.
    Pour la faire courte et limpide:
    4 Frames placées aux 4 coins de ma fenêtre principale, elles mêmes (Frames) contenant chacune 1 Label. limpide et simple sur le papier en somme.

    J'espère avoir été clair, car tout est dans mon code, je ne vois pas comment m'exprimer mieux.

  8. #8
    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 776
    Points
    36 776
    Par défaut
    Salut,
    Pour moi ce code fonctionne:
    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
    from tkinter import *
     
    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,pady=5,bg="red")
            self.leftTop.grid(row=0, column=0)
            Label(self.leftTop,text="Label 1").grid(row=0, column=0,sticky="wn")
            ## Text(self.leftTop,height=6,width=40).grid(row=1,column=0,sticky="wn")
            ## Button(self.leftTop,text="Exécuter",width=50,bg="white").grid(row=2,column=0,sticky="wn")
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,pady=5,bg="green")
            self.leftBottom.grid(row=1, column=0)
            Label(self.leftBottom,text="Label 2").grid(row=1, column=0,sticky="n")
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,pady=5,bg="yellow")
            self.rightTop.grid(row=0, column=1)
            Label(self.rightTop,text="Label 3").grid(row=0, column=1,sticky="n")
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,pady=5,bg="black")
            self.rightBottom.grid(row=1, column=1)
            Label(self.rightBottom,text="Label 4").grid(row=1, column=1,sticky="n")
     
    root = Tk()
    root.title("Frames")
    root.geometry("800x400")
    app = Application(root)
     
    root.mainloop()
    Et c'est le même que vous aviez posté au début modulo les None et la partie commentée.
    Citation Envoyé par hyrule Voir le message
    Mes labels ne sont plus dans les Frames et ces dernières ne sont pas dans la fenêtre principale.
    Et vous constaterez que les Labels sont dans les Frames qui sont dans la fenêtre principale grâce à la bonne idée de leur avoir donné des couleur de fond différentes.

    Citation Envoyé par hyrule Voir le message
    J'espère avoir été clair, car tout est dans mon code, je ne vois pas comment m'exprimer mieux.
    Si tout est dans votre code et que votre code fonctionne...
    Peut être que ce qui s'affiche n'est pas ce que vous attendiez.
    Et c'est pas le code qui va raconter çà...

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

  9. #9
    Invité
    Invité(e)
    Par défaut
    Quand je dis qu'il ne fonctionne pas, c'est au niveau du grid()
    Si vous testez mon dernier code et non le 1er essai vous remarquerez que les labels sont tous les 4 en haut à gauche sans respecter les grid() que je leur indique.

    Dans ma 1er version, à savoir celle que vous avez testé, les grid() sont basés sur ceux de la fenêtre principale. Or chaque label dans chaque Frame doit repartir de zéro :grid(row=0,colunm=0)
    Et dans le code que vous quotez le grid() des labels est basé sur la fenêtre principale grid:

    Pour chaque Frame:
    grid(row=0,colunm=0)
    Label:grid(row=0,colunm=0)
    grid(row=0,colunm=1)
    Label:grid(row=0,colunm=0)
    grid(row=1,colunm=0)
    Label:grid(row=0,colunm=0)
    grid(row=1,colunm=1)
    Label:grid(row=0,colunm=0)

    Je souhaite donc bien les avoir dans des Frames et non comme votre code(mon 1er) dans la fenêtre...
    Mon but: une fenêtre principale(root) contenant 4 contenaires(Frame) qui eux mêmes contiennent des widgets
    Si il faut des captures d'écran pour étayer mes propos demain j'en ferais.
    Dernière modification par Invité ; 26/03/2017 à 23h52.

  10. #10
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hyrule Voir le message
    Je souhaite donc bien les avoir dans des Frames et non comme votre code(mon 1er) dans la fenêtre...
    Mon but: une fenêtre principale(root) contenant 4 contenaires(Frame) qui eux mêmes contiennent des widgets
    Si il faut des captures d'écran pour étayer mes propos demain j'en ferais.
    A partir du moment ou la "grille" contenue dans la Frame ne contient qu'un seul widget, la valeur assignée à row, column est sans importance puisqu'il n'y a qu'un seul widget à placer.

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

  11. #11
    Invité
    Invité(e)
    Par défaut
    justement, cela ne fait pas du tout ce que je souhaite

    sans l'ajout des Labels:

    Nom : Sans titre.png
Affichages : 1434
Taille : 11,8 Ko

    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
     
        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(row=0,column=0,sticky="wesn")
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,bg="green")
            self.leftBottom.grid(row=1,column=0,sticky="wesn")
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,bg="yellow")
            self.rightTop.grid(row=0, column=1,sticky="wesn")
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,bg="black")
            self.rightBottom.grid(row=1,column=1,sticky="wesn")

    avec l'ajout des Labels:

    Nom : Sans titre1.png
Affichages : 1417
Taille : 12,1 Ko

    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
     
        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(row=0,column=0,sticky="wesn")
            label = Label(self.leftTop,text="Label 1")
            label.grid()
     
        def frameLeftBottom(self):
            self.leftBottom = Frame(root,width=400,height=200,bg="green")
            self.leftBottom.grid(row=1,column=0,sticky="wesn")
            label = Label(self.leftBottom,text="Label 2")
            label.grid()
     
        def frameRightTop(self):
            self.rightTop = Frame(root,width=400,height=200,bg="yellow")
            self.rightTop.grid(row=0, column=1,sticky="wesn")
            label = Label(self.rightTop,text="Label 3")
            label.grid()
     
     
        def frameRightBottom(self):
            self.rightBottom = Frame(root,width=400,height=200,bg="black")
            self.rightBottom.grid(row=1,column=1,sticky="wesn")
            label = Label(self.rightBottom,text="Label 4")
            label.grid()
    Il y donc bien un soucis...


    Edit:
    je ne comprends pas pourquoi le site m'intercale tous ces espaces...

  12. #12
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hyrule Voir le message
    Il y donc bien un soucis...
    Que vous utilisiez .pack ou .grid, par défaut, un gestionnaire de positionnement redimensionne la Frame (le contenant) à ce qu'occupent les widgets placés dedans. Et si vous ne voulez pas ce "défaut", il faut le dire en positionnant xxx_propagate à False. C'est pas moi qui l'invente, c'est écrit dans toutes les documentations.
    note: pour en revenir à la cuisine, sans prendre le temps de lire la recette jusqu'au bout avant de se lancer, on risque de se retrouver coincé au milieu de la préparation par "m... je n'ai pas cet ingrédient dans mon frigo.".

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

  13. #13
    Invité
    Invité(e)
    Par défaut
    je viens de lire la doc et effectivement je suis passé à coté.

    à présent outre le fait d'avoir mon code qui fait ce que je veux, j'ai compris ! et c'est le plus important pour moi !
    Encore merci pour votre aide et votre partage

    Edit:
    Encore une petite question (hors sujet) les dimensions "width"d'un widget: Label ou Text, sont exprimé en quoi ? (pour la hauteur c'est en row là ok)
    j’aurais voulus "width" en pixels pour avoir la même que mes Frames...
    Dernière modification par Invité ; 27/03/2017 à 10h44.

  14. #14
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hyrule Voir le message
    A présent outre le fait d'avoir mon code qui fait ce que je veux, j'ai compris ! et c'est le plus important pour moi !
    Je reste dubitatif sur le fait qu'il vous ait fallu faire des copies d'écran pour vous faire comprendre.
    C'est pas si compliqué de créer une Frame avec des dimensions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import tkinter as tk
    >>> f = tk.Frame(width=300, height=300, bg='grey')
    >>> f.pack()
    Et constater qu'elle se redimensionne lorsqu'on place un widget dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> tk.Label(f, text='turlu').pack()
    >>>
    Edit:
    Citation Envoyé par hyrule Voir le message
    Encore une petite question (hors sujet) les dimensions "width"d'un widget: Label ou Text, sont exprimé en quoi ? (pour la hauteur c'est en row là ok)
    Bah... il faut apprendre à lire la documentation sur les widgets Text et Label, tester avec de petits exemples pour s'assurer qu'on a a peu près compris ce qui est écrit, et si vraiment on n'y arrive pas, vous avez un petit code à poster pour illustrer vos soucis.

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

  15. #15
    Invité
    Invité(e)
    Par défaut
    Quoi vous répondre ?
    Je ne sais, je dois donc être un gros nul qui ne comprends rien à rien.
    Et l''excuse de débuter ne marche pas non plus j'imagine.
    encore merci,

  16. #16
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hyrule Voir le message
    Je ne sais, je dois donc être un gros nul qui ne comprends rien à rien.
    Et l''excuse de débuter ne marche pas non plus j'imagine.
    La question est plutôt de savoir si vous ne vous vous lancez pas un peu trop vite dans des choses compliquées... et si vous n'auriez pas intérêt à consolider un peu quelques bases.
    Le risque est de vous décourager à force de buter sur des problèmes simples.

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

  17. #17
    Invité
    Invité(e)
    Par défaut
    un projet "tuto" de 4 frame et 4 labels, compliquer ?

    Ok, j'ai été un surement un peut trop optimiste en effet. Curieusement les layout de java ne me pose aucun soucis, curieux, mais bon vous devez avoir raison.

  18. #18
    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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hyrule Voir le message
    un projet "tuto" de 4 frame et 4 labels, compliquer ?

    Ok, j'ai été un surement un peut trop optimiste en effet. Curieusement les layout de java ne me pose aucun soucis, curieux, mais bon vous devez avoir raison.
    Si on veut jouer avec le layout grid, on peut se contenter d’écrire:

    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
    import tkinter as tk
     
    COLORS = ('red', 'blue', 'green', 'grey')
    NUMBERS = tuple(range(len(COLORS)))
     
    root = tk.Tk()
    root.geometry('300x300')
    root.columnconfigure(NUMBERS, weight=1)
    root.rowconfigure(NUMBERS, weight=1)
    for j in NUMBERS:
        for i in NUMBERS:
            color = COLORS[ (i + j) % len(COLORS) ]
            label = tk.Label(root, text='%d x %d' % (i, j), bg=color)
            label.grid(column=i, row=j, sticky='nwse')
     
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Invité
    Invité(e)
    Par défaut
    Il me semble bien l'avoir compris, mais ma question était de jouer comme dans votre exemple mais avec des Frames différentes.
    Cela change du tout au tout. Enfin, pour moi...

    Positionner les widgets dans une seule "root" (je parle bien de la fenêtre de base) oui, mais dans plusieurs Frames (elles-mêmes placées dans "root) positionnées à différents endroits, cela me pose souci comme déjà dit/expliqué.

    Depuis votre explication, mes Frames sont bien à l'endroit souhaité, tout comme les différents Labels, mais dès que je souhaite rajouter un autre widget, sous chaque Label, de chaque Frame, par exemple, positionné en row=0, colomn=0 (bien que je ne sois pas censé le préciser, car déjà le cas par défaut, il mle semble) ces derniers ce positionnent contre mes idées ( à savoir, les uns en dessous des autres --> sticky="N"). Même en lisant la documentation je ne comprends pas ce comportement.

  20. #20
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hyrule Voir le message
    mais dès que je souhaite rajouter un autre widget, sous chaque Label, de chaque Frame, par exemple, positionné en row=0, colomn=0 (bien que je ne sois pas censé le préciser, car déjà le cas par défaut, il mle semble) ces derniers ce positionnent contre mes idées ( à savoir, les uns en dessous des autres --> sticky="N"). Même en lisant la documentation je ne comprends pas ce comportement.
    Si vous ne postez pas un code minimal illustrant ce que vous racontez... je dirais que vous devriez relire attentivement la documentation.

    - 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.
Page 1 sur 2 12 DernièreDernière

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