Formation PUB400 : Python, 2018 Environnement graphique tkinter

9.14 Utiliser un widget Frame pour positionner les éléments dans une fenêtre


Le widget Frame est un widget qui est invisible par défaut. Son rôle est de regrouper d'autres widgets afin de faciliter leur positionnement.

Par exemple, il permettra de placer une série de widgets Entry côte-à-côte comme suit :

Positionnement avec les Frames

Pour réaliser cet interface, il a fallu 6 Frames, que l'on a rendus visibles par des couleurs sur cette image :

Couleurs pour mieux voir les Frames

  • Chaque paire Label-Entry est dans un Frame (on leur a mis une couleur de fond)
  • L'ensemble des 5 Frames est dans un autre Frame (on lui a mis une bordure de couleur verte)

Le fonctionnement du Frame va comme suit :

  • Le Frame est ajouté à la fenêtre principale. Il est positionné à l'aide de pack(), grid() ou place().
  • Les widgets sont ajoutés au Frame (et non à la fenêtre principale). Ils sont eux aussi positionnés à l'aide de pack(), grid() ou place().

Voici le code qui a permis de créer l'interface présentée plus haut. On voit que la zone de saisie (qui est un Frame, illustré par la bordure verte) et le bouton de soumission sont ajoutés à la fenêtre principale. Chaque paire Label-Entry est ajoutée dans un Frame (illustré par une couleur de fond) qui, lui-même, a été ajouté au Frame de saisie.

Grâce à ce système, il est possible de positionner les Label au-dessus des Entry (c'est le comportement par défaut de pack()) et de positionner chaque paire à côté de la paire précédente (side=LEFT).

Python

# fenêtre principale
fenetre = Tk()
fenetre.title('Mes cookies')

 

# frames pour la mise en page
zone_saisie = Frame(fenetre)
zone_saisie.pack()

 

zone1 = Frame(zone_saisie)
zone1.pack(side=LEFT)

 

zone2 = Frame(zone_saisie)
zone2.pack(side=LEFT)

 

zone3 = Frame(zone_saisie)
zone3.pack(side=LEFT)

 

zone4 = Frame(zone_saisie)
zone4.pack(side=LEFT)

 

zone5 = Frame(zone_saisie)
zone5.pack(side=LEFT)

 

# nom de domaine
Label(zone1, text='Nom de domaine :').pack(padx=10, pady=(10, 0))
url = Entry(zone1, width=30)
url.pack(padx=10, pady=0)

 

# nom du cookie
Label(zone2, text='Nom du cookie :').pack(padx=10, pady=(10, 0))
nom = Entry(zone2, width=30)
nom.pack(padx=10, pady=0)

 

# valeur
Label(zone3, text='Valeur :').pack(padx=10, pady=(10, 0))
valeur = Entry(zone3, width=30)
valeur.pack(padx=10, pady=0)

 

# date
Label(zone4, text='Date de création :').pack(padx=10, pady=(10, 0))
creation = Entry(zone4, width=30)
creation.pack(padx=10, pady=0)

 

# durée

Label(zone5, text='Durée en secondes :').pack(padx=10, pady=(10, 0))
duree = Entry(zone5, width=30)
duree.pack(padx=10, pady=0)

 

# bouton de soumission
bouton_soumission = Button(fenetre, text='Ajouter', command=click_soumettre)
bouton_soumission.pack(padx=5, pady=(5, 15))

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre