web-dev-qa-db-fra.com

Comment empêcher Tkinter Frame de rétrécir pour s'adapter à son contenu?

C'est le code qui me pose problème.

f = Frame(root, width=1000, bg="blue")
f.pack(fill=X, expand=True)

l = Label(f, text="hi", width=10, bg="red", fg="white")
l.pack()

Si je commente les lignes avec l'étiquette, le cadre s'affiche avec la bonne largeur. Cependant, l'ajout de l'étiquette semble réduire le cadre à la taille de l'étiquette. Y a-t-il un moyen d'empêcher que cela se produise?

39
Johnston

Par défaut, pack et grid réduisent ou développent un widget pour l'adapter à son contenu , ce que vous voulez 99,9% du temps. Le terme qui décrit cette fonctionnalité est "propagation géométrique". Il existe une commande pour activer ou désactiver la propagation de la géométrie lors de l'utilisation de pack (et une similaire pour grid).

Puisque vous utilisez pack, la syntaxe serait:

f.pack_propagate(0)

ou peut-être root.pack_propagate(0), selon les widgets que vous souhaitez réellement affecter. Cependant, comme vous n'avez pas donné la hauteur du cadre, sa hauteur par défaut est d'un pixel, vous ne pouvez donc toujours pas voir les widgets intérieurs. Pour obtenir le plein effet de ce que vous voulez, vous devez donner au cadre contenant à la fois une largeur et une hauteur.

Cela étant dit, la grande majorité du temps, vous devriez laisser Tkinter calculer la taille. Lorsque vous désactivez la propagation de la géométrie, votre interface graphique ne répond pas bien aux changements de résolution, aux changements de polices, etc. Les gestionnaires de géométrie de Tkinter (pack, place et grid) sont remarquablement puissant. Apprenez à profiter de ce pouvoir.

54
Bryan Oakley