Probleme de gestion de frames

Fermé
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - 10 juin 2022 à 18:29
 goplin - 14 juin 2022 à 23:17
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

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