J'ai cherché sur différents sites Web pour essayer de savoir quel poids fait tkinter. Je l'ai obtenu de TkDocs :
Chaque colonne et ligne a une option de grille de "poids" qui lui est associée, qui lui indique combien elle devrait augmenter s'il y a de la place supplémentaire dans le maître à remplir. Par défaut, le poids de chaque colonne ou ligne est de 0, ce qui signifie ne pas développer pour remplir l'espace.
Quelqu'un pourrait-il mettre cela dans un certain contexte pour moi, car j'ai du mal à comprendre ce qu'il fait. J'ai expérimenté le code suivant, et il semble simplement déplacer les choses sur la page lorsque je modifie les valeurs.
try:
import tkinter
except ImportError: # python 2
import Tkinter as tkinter
import os
mainWindow = tkinter.Tk()
mainWindow.title("Grid demo")
mainWindow.geometry('640x480-8-200')
label = tkinter.Label(mainWindow, text="tkinter grid demo")
label.grid(row=0, column=0, columnspan=3)
mainWindow.columnconfigure(0, weight=1)
mainWindow.columnconfigure(1, weight=1)
mainWindow.columnconfigure(2, weight=3)
mainWindow.columnconfigure(3, weight=3)
mainWindow.columnconfigure(4, weight=3)
mainWindow.rowconfigure(0, weight=1)
mainWindow.rowconfigure(1, weight=10)
mainWindow.rowconfigure(2, weight=1)
mainWindow.rowconfigure(3, weight=3)
mainWindow.rowconfigure(4, weight=3)
fileList = tkinter.Listbox(mainWindow)
fileList.grid(row=1, column=0, sticky='nsew', rowspan=2)
fileList.config(border=2, relief='sunken')
for zone in os.listdir('/Windows/System32'):
fileList.insert(tkinter.END, zone)
mainWindow.mainloop()
Dans les termes les plus simples possibles, un poids différent de zéro fait augmenter une ligne ou une colonne s'il y a de l'espace supplémentaire. La valeur par défaut est un poids de zéro, ce qui signifie que la colonne ne s'agrandira pas s'il y a de l'espace supplémentaire.
Considérez le code suivant, qui crée une fenêtre plus grande que les widgets qui se trouvent à l'intérieur et pour laquelle aucune colonne n'a de poids:
import tkinter as tk
root = tk.Tk()
root.geometry("200x100")
f1 = tk.Frame(root, background="bisque", width=10, height=100)
f2 = tk.Frame(root, background="pink", width=10, height=100)
f1.grid(row=0, column=0, sticky="nsew")
f2.grid(row=0, column=1, sticky="nsew")
root.grid_columnconfigure(0, weight=0)
root.grid_columnconfigure(1, weight=0)
root.mainloop()
Voici à quoi ressemble la fenêtre:
La raison pour laquelle il ressemble à cela est que tkinter a été invité à ne donner aucun espace supplémentaire aux colonnes, donc l'espace supplémentaire n'est pas utilisé à droite.
Maintenant, changez le code pour donner un poids à une seule colonne:
root.grid_columnconfigure(0, weight=1)
Lorsque nous redémarrons, nous avons maintenant une fenêtre qui ressemble à ceci:
Qu'est-il arrivé? Parce que la colonne zéro avait un poids d'un, tkinter a donné l'espace supplémentaire à cette colonne. Vous auriez pu régler le poids à 1, 100, 100000 et vous obtiendriez le même résultat. Dans ce cas, tout l'espace supplémentaire va à cette seule colonne.
Que se passe-t-il si vous attribuez un poids aux deux colonnes? Le poids est divisé entre les colonnes proportionnellement à leur poids. Par exemple, supposons que vous vouliez une zone de navigation sur la gauche qui occupe 1/4 de l'écran et la zone principale devrait occuper 3/4 de l'écran.
Modifiez les poids pour qu'ils ressemblent à ceci:
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=3)
Étant donné que les deux colonnes ont du poids, un espace supplémentaire est donné aux deux colonnes. Pour chaque quatre pixels d'espace supplémentaire, la colonne 0 obtiendra 1 et la colonne 1 obtiendra les 3 autres.
De plus, si vous redimensionnez la fenêtre de manière interactive, la proportion est préservée autant que possible. Voici la même fenêtre que j'ai redimensionnée manuellement pour être beaucoup plus large: