Probleme de gestion de frames

xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -  
 goplin -
Bonjour,

Je suis sous python 3 et j’essaie d'avoir ce résultat avec frame

+----------------------------------------------------+---------------+---------------+
| Frame 0 |
+----------------------------------------------------+---------------+---------------+
| | Frame 2 | Frame 3 |
| | | |
| | | |
| Frame 1 |---------------+---------------+
| | Frame 4 | Frame 5 |
| | | |
| | | |
+----------------------------------------------------+---------------+---------------+


mon code :
def frames()
frame0 = tk.Frame(fp, width=400, height=40, bg="orange", relief=FLAT, borderwidth=5)
frame0.pack(fill=tk.BOTH, side=tk.TOP)


frame1 = tk.Frame(fp, width=200, bg="red")
frame1.pack(fill=tk.BOTH, side=tk.LEFT, expand=True)


frame2 = tk.Frame(fp, width=50, bg="grey") #<--------
frame2.pack(fill=tk.BOTH, side=tk.LEFT) #, expand=True)



frame3 = tk.Frame(fp, width=50, bg="blue")
frame3.pack(fill=tk.BOTH, side=tk.LEFT)#, expand=True)


frame4 = tk.Frame(fp, width=50, bg="pink")
frame4.pack(fill=tk.BOTH, side=tk.TOP)


frame5 = tk.Frame(fp, width=50, bg="purple")
frame5.pack(fill=tk.BOTH, side=tk.RIGHT)#, expand=True)


label = tk.Label(frame0, text=" Frame 0 ").pack()
label = Label(frame1, text="Frame 1").pack()
label = Label(frame2, text="Frame 2").pack()
label = Label(frame3, text="Frame 3").pack()
label = Label(frame4, text="Frame 4").pack()
label = Label(frame5, text="Frame 5").pack()


en vin, je n'y arrive pas. Pouvez vous m'expliquer pourquoi ?

Merci d'avance pour vos avis et conseils.

Configuration: Linux / Firefox 100.0
A voir également:

1 réponse

goplin
 
Bonsoir,

Je ne sais si tu as trouvé comment disposer tes frames sous forme de tableau, mais je donne tout de même un semblant d'exemple.
Je pense que le gestionnaire grid est bien plus adapté pour faire un tableau de frames que pack.

Exemple en utilisant grid, j'ai mis des dimensions pour l'exemple, à toi d'adapter, ce qu'il faut bien comprendre, est l'utilisation conjointe du sticky dans le grid avec les fusions de cellules et colonnes(comme dans un tableau d'une page html ou encore d'un traitement de texte).

import tkinter as tk

def frames_build(master):
    ct = tk.Frame(master)
    ct.grid()
    frames = {}

    frames[0] = tk.Frame(ct, width=400, height=40, bg='orange', relief=tk.FLAT, borderwidth=5)
    frames[0].grid(columnspan=3, sticky=tk.NSEW)

    frames[1] = tk.Frame(ct, width=240, height=200, bg='red')
    frames[1].grid(row=1, column=0, rowspan=2, sticky=tk.NSEW)

    # les 4 frames restantes
    frames_param = (('grey', 1, 1), ('pink', 1, 2), ('blue', 2, 1), ('purple', 2, 2),)
    for i, (bg, row, col) in enumerate(frames_param, start=2):
        frames[i] = tk.Frame(ct, width=80, height=100, bg=bg)
        frames[i].grid(row=row, column=col, sticky=tk.NSEW)

    for i in range(6):
        frames[i].grid_propagate(0) # Permet aux frames de perdre leur "élasticité"
        # permet de centrer le label dans les frames (cas de widget enfant unique)
        frames[i].rowconfigure(0, weight=1)
        frames[i].columnconfigure(0, weight=1)
        lbl = tk.Label(frames[i], text=f'frame {i}', anchor=tk.CENTER)
        lbl.grid()

window = tk.Tk()
frames_build(window)
window.mainloop()


Si tu as besoin d'éclaircissements sur certains points de ce code, n'hésite pas =)
0