2010-12-09 36 views
15

La taille des fenêtres Tkinter peut être contrôlé par les méthodes suivantes:Comment régler la hauteur et la largeur minimale et maximale d'un cadre?

.minsize() 
.maxsize() 
.resizable() 

Y at-il des moyens équivalents pour contrôler la taille des Tkinter ou TTK Cadres?

@Bryan: J'ai changé votre code frame1.pack à ce qui suit:

frame1.pack(fill='both', expand=True) 
frame1.bind('<Configure>', maxsize) 

Et j'ai ajouté ce gestionnaire d'événements:

# attempt to prevent frame from growing past a certain size 
def maxsize(event=None): 
    print frame1.winfo_width() 
    if frame1.winfo_width() > 200: 
     print 'frame1 wider than 200 pixels' 
     frame1.pack_propagate(0) 
     frame1.config(width=200) 
     return 'break' 

Le gestionnaire d'événements ci-dessus détecte que la largeur d'un cadre est trop grand, mais est incapable d'empêcher l'augmentation de la taille de se produire. Est-ce une limitation de Tkinter ou ai-je mal compris votre explication?

+1

Je pense que vous avez mal compris. Mon explication indiquait que si vous empaquetez avec expand à False et fill sur sans, le frame aura une largeur statique et ne grossira pas ou ne rétrécira pas. Si le cadre change de taille en raison de son parent, le paramètre pack_propagate sur le cadre n'a aucun effet, vous devez le définir sur le parent. pack_propagate définit uniquement si le cadre change de taille en fonction de son contenu, et non en fonction de son parent. –

+0

@Brian: Merci pour votre suivi. Je comprends maintenant. – Malcolm

Répondre

20

Il n'y a pas de fonction magique unique pour forcer une image à une taille minimale ou fixe. Cependant, vous pouvez certainement forcer la taille d'un cadre en lui donnant une largeur et une hauteur. Vous devez ensuite faire deux autres choses: lorsque vous placez cette fenêtre dans un conteneur, vous devez vous assurer que le gestionnaire de géométrie ne rétrécit pas ou ne développe pas la fenêtre. Deuxièmement, si le cadre est un conteneur pour un autre widget, désactivez la propagation de la grille ou du pack afin que le cadre ne rétrécisse pas ou ne s'étende pas pour s'adapter à son propre contenu. Notez toutefois que cela ne vous empêchera pas de redimensionner une fenêtre pour qu'elle soit plus petite qu'une image interne. Dans ce cas, le cadre sera simplement coupé.

import Tkinter as tk 

root = tk.Tk() 
frame1 = tk.Frame(root, width=100, height=100, background="bisque") 
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222") 

frame1.pack(fill=None, expand=False) 
frame2.place(relx=.5, rely=.5, anchor="c") 

root.mainloop() 
+0

Merci pour l'explication et l'exemple de code. J'ai modifié votre code et mis à jour ma question. – Malcolm