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 :

Insertion d'un tableau


Sujet :

Tkinter Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Insertion d'un tableau
    Bonjour,

    j'ai créé ce tableau :

    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
    import tkinter as tk
     
    fonts = {
        'normal': 'arial 9',
        'bold': 'arial 9 bold',
        }
     
    root = tk.Tk()
    for i in range(3):
        color = ['grey75', 'white'][i % 2]
        for j in range(3):
            label = tk.Label(root, text='label %d x %d' % (j, i),
                             bg=color, width=20, anchor='w',
                             font=fonts['normal'])
            label.grid(row=j, column=i, padx=3)
     
    tk.mainloop()
    Maintenant je souhaite l'insérer dans une fenêtre du widget Notebook de ttk.
    Dans le code ci-dessous les labels ne sont plus alignés.
    Pourriez-vous m'aider à corriger ce code svp?
    Merci d'avance.

    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
    from tkinter import *
    import tkinter.tix as tix
    from tkinter import ttk
     
    def Statistique():
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        for i in range(3):
            color = ['grey75', 'white'][i % 2]
            for j in range(3):
                label = tix.Label(frame1, text='label %d x %d' % (j, i),
                                 bg=color, width=2, anchor='w',
                                 font=fonts['normal'])
                label.grid(row=j, column=i, padx=1)
     
        return frame1       
     
    def create_frame(master, t):
        frame = Frame(master, bd=2, relief=SUNKEN)
        t = ""
        text = Text(frame, font=48)
        text.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        frame.grid_columnconfigure(0, weight=3) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=3) # expansion de la colonne    
     
        text.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", borderwidth=3, command=Statistique)
        newBtn.pack(side=LEFT, fill=X)
     
        return frame
     
    if __name__ == '__main__':
        root = tix.Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
        root.update()
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
        root.update()    
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Je ne vois pas comment tu peux t'y retrouver dans ton code, ce que je te conseille pour tenir une rigueur dans tes fonctions est de les déclarer dans un autre module de ton application, parce que là tu accèdes à des variables globales au script, ce qui rend ton code très confus.
    Et surtout faire des fonctions ayant un sens, car on se demande pourquoi une fonction se nommant create_frame crée un widget text et un bouton, ou une autre Statistique créant un tableau de labels et retourne une frame définie dans l'espace global du script ?

    En fait je te conseille même de ne pas faire de fonction pour créer tes widgets et de t'en tenir à les déclarer dans ton module, parce qu'à la lecture de ton code, on voit bien que tu ne comprends pas ce que tu fais, que vient faire tix dans ton script ? Tous les updates du root ne servent à rien, tu mélanges les gestionnaires de positionnement grid, pack, un paramètre font incorrect, etc.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut.

    Je ne vois pas comment tu peux t'y retrouver dans ton code, on voit bien que tu ne comprends pas ce que tu fais ?
    J'ai rapporté un bout de code d'une interface que j'ai créé et qui fonctionne bien. Y'a des choses à revoir, c'est vrai, et je compte y apporter des corrections au fur et à mesure. Mais dans le cas présent, ce que je souhaite, c'est d'insérer un tableau dans un(e) frame. Et je pensais pas que ça soit aussi compliqué.

  4. #4
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Lorsqu'on rencontre des problèmes de positionnement, il faut procéder par étape, on commence par établir les widgets conteneurs de la fenêtre, en utilisant surtout des couleurs pour bien visualiser ce que ça donne.

    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
    import tkinter as tk
    from tkinter import ttk
     
    L = 600
    H = 500
     
    HBARRE = 30
    HSEMAINIER = 380
    HPIED = 90
     
    root = tk.Tk()
    root.title('Semainier')
    root.geometry('{}x{}'.format(L, H))
    root.columnconfigure(0, weight=1) # Une seule colonne extensible
    root.rowconfigure(1, weight=1) # Rend extensible le semainier
     
    # Frame des boutons supérieurs
    barre = tk.Frame(root, width=L, height=HBARRE, bg='yellow')
    barre.grid(sticky=tk.NSEW)
    barre.rowconfigure(0, weight=1) # Une seule ligne
    barre.grid_propagate(False) # Interdit l'adaptation des dim. au contenu
     
    # Notebook
    semainier = ttk.Notebook(root, width=L, height=HSEMAINIER)
    semainier.grid(sticky=tk.NSEW)
    semainier.columnconfigure(0, weight=1)
    semainier.rowconfigure(0, weight=1)
    semainier.grid_propagate(False)
    # On colore le fond pour visualiser s'il est bien étendu
    s = ttk.Style()
    s.configure('TNotebook', background='green')
     
    # Pied de page 
    pied = tk.Frame(root, width=L, height=HPIED, bg='blue')
    pied.grid(sticky=tk.NSEW)
     
    root.mainloop()
    Ensuite, on intègre du contenu aux widgets conteneurs.

    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
    import tkinter as tk
    from tkinter import ttk
     
    L = 600
    H = 500
     
    HBARRE = 30
    HSEMAINIER = 380
    HPIED = 90
     
    root = tk.Tk()
    root.title('Semainier')
    root.geometry('{}x{}'.format(L, H))
    root.columnconfigure(0, weight=1) # Une seule colonne extensible
    root.rowconfigure(1, weight=1) # Rend extensible le semainier
     
    # Frame des boutons supérieurs
    barre = tk.Frame(root, width=L, height=HBARRE, bg='yellow')
    barre.grid(sticky=tk.NSEW)
    barre.rowconfigure(0, weight=1) # Une seule ligne
    barre.grid_propagate(False) # Interdit l'adaptation des dim. au contenu
     
    # Notebook
    semainier = ttk.Notebook(root, width=L, height=HSEMAINIER)
    semainier.grid(sticky=tk.NSEW)
    semainier.columnconfigure(0, weight=1)
    semainier.rowconfigure(0, weight=1)
    semainier.grid_propagate(False)
    # On colore le fond pour visualiser s'il est bien étendu
    s = ttk.Style()
    s.configure('TNotebook', background='green')
     
    # Pied de page 
    pied = tk.Frame(root, width=L, height=HPIED, bg='blue')
    # pied.grid(sticky=tk.NSEW) # On ne grid plus le pied
     
    ################# CONTENUS ################
     
     
    bout_stats = tk.Button(barre, text="Stats")
    bout_stats.grid(sticky=tk.NS) # On l'étend de haut en bas
     
     
    flundi = tk.Frame(semainier, bg='orange')
    flundi.columnconfigure(0, weight=1)
    flundi.rowconfigure(0, weight=1)
    semainier.add(flundi, text='Lundi')
     
    lundi = tk.Text(flundi)
    lundi.grid(sticky=tk.NSEW)
    lundi.insert(tk.END, 'Le lundi au soleil ...')
     
     
    colors = ('grey75', 'white')
    labels_stats = []
    for col in range(3):
        pied.columnconfigure(col, weight=1)
        pied.rowconfigure(col, weight=1)
        for row in range(3):
            label = tk.Label(
                pied,
                text='label %d x %d' % (row, col),
                 bg=colors[col % 2],
                 anchor=tk.W,
                 fg='blue',
            )
            labels_stats.append(label)
            label.grid(row=row, column=col, sticky=tk.NSEW)
     
    bout_stats.configure(command=lambda : pied.grid(sticky=tk.NSEW))
     
    root.mainloop()
    Et en dernier, on peut établir une simple fonction pour afficher ou cacher le pied de la fenêtre.

    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
    import tkinter as tk
    from tkinter import ttk
     
    def montrer_pied(pied) :
        ''' Affiche/cache le pied de page '''
        # Si le pied est déjà grid, on l'oublie
        if pied.winfo_ismapped() :
            pied.grid_forget()
        # On le grid
        else :
            pied.grid(sticky=tk.NSEW)
     
    L = 600
    H = 500
     
    HBARRE = 30
    HSEMAINIER = 380
    HPIED = 90
     
    root = tk.Tk()
    root.title('Semainier')
    root.geometry('{}x{}'.format(L, H))
    root.columnconfigure(0, weight=1) # Une seule colonne extensible
    root.rowconfigure(1, weight=1) # Rend extensible le semainier
     
    # Frame des boutons supérieurs
    barre = tk.Frame(root, width=L, height=HBARRE, bg='yellow')
    barre.grid(sticky=tk.NSEW)
    barre.rowconfigure(0, weight=1) # Une seule ligne
    barre.grid_propagate(False) # Interdit l'adaptation des dim. au contenu
     
    # Notebook
    semainier = ttk.Notebook(root, width=L, height=HSEMAINIER)
    semainier.grid(sticky=tk.NSEW)
    semainier.columnconfigure(0, weight=1)
    semainier.rowconfigure(0, weight=1)
    semainier.grid_propagate(False)
    # On colore le fond pour visualiser s'il est bien étendu
    s = ttk.Style()
    s.configure('TNotebook', background='green')
     
    # Pied de page 
    pied = tk.Frame(root, width=L, height=HPIED, bg='blue')
    # pied.grid(sticky=tk.NSEW)
     
    ################# CONTENUS ################
     
     
    bout_stats = tk.Button(barre, text="Stats")
    bout_stats.grid(sticky=tk.NS) # On l'étend de haut en bas
     
     
    flundi = tk.Frame(semainier, bg='orange')
    flundi.columnconfigure(0, weight=1)
    flundi.rowconfigure(0, weight=1)
    semainier.add(flundi, text='Lundi')
     
    lundi = tk.Text(flundi)
    lundi.grid(sticky=tk.NSEW)
    lundi.insert(tk.END, 'Le lundi au soleil ...')
     
     
    colors = ('grey75', 'white')
    labels_stats = []
    for col in range(3):
        pied.columnconfigure(col, weight=1)
        pied.rowconfigure(col, weight=1)
        for row in range(3):
            label = tk.Label(
                pied,
                text='label %d x %d' % (row, col),
                 bg=colors[col % 2],
                 anchor=tk.W,
                 fg='blue',
            )
            labels_stats.append(label)
            label.grid(row=row, column=col, sticky=tk.NSEW)
     
    bout_stats.configure(command=lambda : montrer_pied(pied))
     
    root.mainloop()
    Une fois que tout est établi, alors oui, tu peux très bien faire des fonctions pour créer contenu du pied de la fenêtre, pages du notebook, mais en fournissant des paramètres à tes fonctions.
    Le temps ronge l'amour comme l'acide.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci beaucoup pour cette aide qui m'a permis de trouver la solution à mon problème. Voici le code rectifié :

    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
    from tkinter import *
    from tkinter import ttk
     
    def Statistique1(t, monText):
        pass
     
    def Statistique(t, monText):
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        for i in range(3):
            color = ['grey75', 'white'][i % 2]
            for j in range(3):
                label = Label(monText, text=t,
                                 bg=color, anchor='w',
                                 font=fonts['normal'])
                label.grid(row=j, column=i, padx=1)
     
        return monText       
     
    def create_frame(master, t):
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
        }
        frame = Frame(master, bd=2, relief=SUNKEN)
     
        t = "mon Label"
        monText = Text(frame)
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
     
        frame.grid_columnconfigure(0, weight=1) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=1) # expansion de la colonne
     
        monText.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique(t, monText))
        newBtn.pack(side=LEFT, fill=X)
     
        return frame
     
    if __name__ == '__main__':
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()
    Ce que j'ai l'intention de faire c'est de remplir ce tableau à partir d'un fichier texte de ce genre :

    ligne 1 : mots - mots - mots
    ligne 2 : mots - mots - mots
    ligne 3 : mots - mots - mots
    etc...

    Il me reste 2 questions à régler dans le code ci-dessus.
    La première concerne la case ligne 1 colonne 2. Y'a une lettre ou un symbole qui s'affiche sur le côté gauche et je ne sais pas d'où il vient.
    La deuxième concerne la taille de la fenêtre qui s'affiche :
    - lorsque j'écris command=Statistique au niveau du paramétrage du bouton, la taille de la fenêtre est ajuster à la taille du tableau
    - lorsque je modifie command=Statistique par command=Statistique1 (et que je ne crée ainsi pas de tableau), je ne sais pas ce qui fixe la taille de la fenêtre qui apparait.

  6. #6
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par Arsene12 Voir le message
    La première concerne la case ligne 1 colonne 2. Y'a une lettre ou un symbole qui s'affiche sur le côté gauche et je ne sais pas d'où il vient.
    C'est évident non ? C'est le texte que tu as écrit et qui est caché par tes labels, que viennent faire tes labels dans ton widget Text ?

    Citation Envoyé par Arsene12 Voir le message
    - lorsque j'écris command=Statistique au niveau du paramétrage du bouton, la taille de la fenêtre est ajuster à la taille du tableau
    Je t'ai montré au-dessus comment parer cela, donc prends au moins le temps d'analyser ce code, mais comme tu grid tes labels sur ton widget text, t'es déjà un peu mal parti.
    Le temps ronge l'amour comme l'acide.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par bistouille Voir le message
    C'est évident non ? C'est le texte que tu as écrit et qui est caché par tes labels, que viennent faire tes labels dans ton widget Text ?
    Pardon pour cette faute d'inattention.

    Citation Envoyé par bistouille Voir le message
    Je t'ai montré au-dessus comment parer cela, donc prends au moins le temps d'analyser ce code, mais comme tu grid tes labels sur ton widget text, t'es déjà un peu mal parti.
    Merci. Il fallait que je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monText.columnconfigure(i, weight=1)
    J'ai rectifié le code. J'obtiens exactement ce que je voulais.

    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
    from tkinter import *
    from tkinter import ttk
     
    L = 600
    H = 500
     
    nbreElement = 4
     
    def Statistique1(t, monText):
        pass
     
    def Statistique(t, monText):    
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        for i in range(nbreElement):
            monText.columnconfigure(i, weight=1)
            #monText.rowconfigure(i, weight=1)
            color = ['grey75', 'white'][i % 2]
            for j in range(3):
                label = Label(monText, text=t, width=int(L/nbreElement), 
                                 bg=color, anchor='w',
                                 font=fonts['normal'])
                label.grid(row=j, column=i, padx=1)
     
        #return monText       
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, relief=SUNKEN)
     
        t = "mon label"
     
        frame.grid_columnconfigure(0, weight=1) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=1) # expansion de la colonne
     
        monText = Text(frame)
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
     
        #monText.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique(t, monText))
        newBtn.pack(side=LEFT, fill=X)
     
        root.geometry('{}x{}'.format(L, H))
     
        return frame
     
    if __name__ == '__main__':
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()
    Y'a un dernier truc qui m'échappe. Je remarque que si je commente root.geometry('{}x{}'.format(L, H)), la largeur de la fenêtre devient la largeur de l'écran alors quelle devrait être fixée par width=int(L/nbreElement).

  8. #8
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par Arsene12 Voir le message
    Y'a un dernier truc qui m'échappe. Je remarque que si je commente root.geometry('{}x{}'.format(L, H)), la largeur de la fenêtre devient la largeur de l'écran alors quelle devrait être fixée par width=int(L/nbreElement).
    La largeur d'un Label (tout comme les widgets Text, Button, etc) est exprimée en nombre de caractères, pas en nombre de pixels, ce qui fait que la largeur de tes labels est ignorée est le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monText.columnconfigure(i, weight=1)
    Lequel prévaut sur les largeurs, commente cette ligne, et la ligne du geometry, tu verras ce qu'il se passe.
    Le temps ronge l'amour comme l'acide.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut.
    La largeur d'un Label (tout comme les widgets Text, Button, etc) est exprimée en nombre de caractères, pas en nombre de pixels, ce qui fait que la largeur de tes labels est ignorée est le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monText.columnconfigure(i, weight=1)
    Lequel prévaut sur les largeurs, commente cette ligne, et la ligne du geometry, tu verras ce qu'il se passe.
    J'avais déja fait des essais en commentant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monText.columnconfigure(i, weight=1)
    width=int(L/nbreElement)
    root.geometry('{}x{}'.format(L, H))
    J'en ai déduit que width=int(L/nbreElement) ne sers que pour agrandir la largeur des labels lorsque ceux-ci n'occupent pas toute la largeur de la fenêtre.

    Il suffit de commenter width=int(L/nbreElement) pour le vérifier :

    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
    from tkinter import *
    from tkinter import ttk
     
    L = 600
    H = 500
     
    nbreElement = 4
     
    def Statistique1(t, monText):
        pass
     
    def Statistique(t, monText):    
     
        fonts = {
            'normal': 'arial 9',
            'bold': 'arial 9 bold',
            }
     
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
        for i in range(nbreElement):
            monText.columnconfigure(i, weight=1)
            #monText.rowconfigure(i, weight=1)
            color = ['grey75', 'orange'][i % 2]
            for j in range(3):
                label = Label(monText, text=t, width=int(L/nbreElement), 
                                 bg=color, anchor='s',
                                 font=fonts['normal'])
                label.grid(row=j, column=i, padx=1)
     
        #return monText       
     
    def create_frame(master, t):
     
        frame = Frame(master, bd=2, relief=SUNKEN)
     
        t = "mon lab"
     
        frame.grid_columnconfigure(0, weight=1) # expansion de la colonne
        frame.grid_rowconfigure(0, weight=1) # expansion de la colonne
     
        monText = Text(frame)
        monText.grid(row=0, column=0, sticky='nwse') # expansion du widget Text
     
     
        #monText.insert(0.0, t)
     
        newBtn = Button(toolbar, text="Tableau", bg="maroon", fg="white", borderwidth=3, command=Statistique(t, monText))
        newBtn.pack(side=LEFT, fill=X)
     
        root.geometry('{}x{}'.format(L, H))
     
        return frame
     
    if __name__ == '__main__':
        root = Tk()
     
        myColor="lightblue"
     
        # Defines and places the notebook widget
     
        nb = ttk.Notebook(root)
        toolbar = Frame(root, borderwidth=2, relief='raised', background=myColor)
     
        frame1 = create_frame(nb,1)
        nb.add(frame1, text='Text')
     
        toolbar.pack(side=TOP, fill=X)
        nb.pack(fill=BOTH, expand=1)
     
     
        # Fin du menu deroulant #############################################  
     
        root.configure(background="green")
        root.mainloop()

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

Discussions similaires

  1. insertion dans un tableau de byte
    Par hamma2 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/04/2007, 10h02
  2. Insertion d'un tableau dans une interface
    Par the java lover dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/03/2007, 13h04
  3. Réponses: 8
    Dernier message: 28/12/2006, 11h42
  4. Réponses: 16
    Dernier message: 02/12/2005, 10h39
  5. Insertion javascript dans tableau HTML
    Par Rocca dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2005, 12h28

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