2010-12-09 6 views
15

Die Größe der Tkinter Fenster kann über folgende Methoden gesteuert werden:Wie wird die minimale und maximale Höhe oder Breite eines Frames eingestellt?

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

Gibt es gleichwertige Möglichkeiten, um die Größe von Tkinter oder ttk Frames zu kontrollieren?

@Bryan: änderte ich Ihre frame1.pack Code auf die folgenden:

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

Und ich diesen Event-Handler hinzugefügt: zu

# 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' 

Die oben erkennt Ereignisbehandlungsroutine, die eine Breite des Rahmens ist groß, aber ist nicht in der Lage, die Größenzunahme zu verhindern. Ist das eine Einschränkung von Tkinter oder habe ich deine Erklärung missverstanden?

+1

Ich denke, Sie missverstanden. Meine Erklärung wies darauf hin, dass der Frame eine statische Breite hat und nicht wachsen oder schrumpfen wird, wenn Sie packen, wenn expand auf "False" gesetzt ist und fill auf "None" gesetzt ist. Wenn der Rahmen aufgrund seiner übergeordneten Größe geändert wird, hat das Festlegen von pack_propagate für den Rahmen keine Auswirkungen, Sie müssen ihn für das übergeordnete Element festlegen. pack_propagate legt nur fest, ob der Frame die Größe basierend auf seinem Inhalt ändert, nicht basierend auf seinem übergeordneten Element. –

+0

@Bryan: Vielen Dank für Ihr Follow-up. Ich verstehe jetzt. – Malcolm

Antwort

20

Es gibt keine einzelne magische Funktion, um einen Rahmen auf ein Minimum oder eine feste Größe zu zwingen. Sie können jedoch die Größe eines Rahmens bestimmen, indem Sie dem Rahmen eine Breite und Höhe geben. Sie müssen dann möglicherweise zwei weitere Dinge tun: Wenn Sie dieses Fenster in einen Container einfügen, müssen Sie sicherstellen, dass der Geometrie-Manager das Fenster nicht verkleinert oder vergrößert. Zweitens: Wenn der Rahmen ein Container für ein anderes Widget ist, deaktivieren Sie das Gitter oder die Paketausbreitung, sodass der Rahmen nicht verkleinert oder vergrößert wird, um seinen eigenen Inhalt anzupassen.

Beachten Sie jedoch, dass dies die Größe eines Fensters, das kleiner als ein interner Frame ist, nicht verhindert. In diesem Fall wird der Rahmen einfach abgeschnitten.

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

Danke für die Erklärung und Beispielcode. Ich habe Ihren Code geändert und meine Frage aktualisiert. – Malcolm

Verwandte Themen