Hallo secretwz
Deine Frage ist ein Beweis dafür, dass du mein Skript ganz genau angeschaut hast. Wird der propagate()-Methode des Frame-Widget eine 0 bzw. False übergeben schaltet dies die automatische Layout-Anpassung des Frames auf die Geometrie der ins Frame eingebetteten Widges ab. Das heisst die Geometrie des Frames muss über seine Optionen '.height' oder 'width' gesetzt werden.
Der Grund, dass ich die automatische Geometrie-Steuerung des Frames abgeschaltet habe ist ich wollte eine horizontal symetrische Verteilung der beiden Widgets 'entry_search' und 'button_search' erreichen. Auf diese Art konnte ich mein Willen durchsetzen. Auch in Tkinter gibt es manchmal Momente wo man sich experimentieren durchsetzen muss. Es ist gut möglich, dass es noch andere Wege gibt um dies zu erzielen.
Wenn die automatische Geometrie-Steuerung des Frames abgeschalten ist muss die Geometrie der eingebetteten abgefragt werden. In unserem Fall ist dies die Höhe von 'entry_search' und 'button_search' mittels der Methode-'.winfo_reqheight()' und setzt damit die Option 'height' ihrer' Behälter-Frames.
Ich habe das Skript auf ein Minimum reduziert um einige Beispiele zu zeigen. Hier das das erste Skript mit Abschaltung der automatischen Geometrie-Steuerung der Frames:
Code: Alles auswählen
# coding: UTF-8
#imports
import Tkinter as tk
import anydbm
import sqlite3
MAIN_BG_COLOR = "#cde66a"
if __name__ == "__main__":
#Fenstererstellung
window = tk.Tk()
window.config(bg=MAIN_BG_COLOR)
window.geometry("800x200")
# Hauptrahmen
window_frame = tk.Frame(window, bg=MAIN_BG_COLOR)
window_frame.pack(side='top', fill='both', expand='yes')
#--- Erstellung des Fenster-Layouts ---#
# Label: Begruessung
label_welcome_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_welcome_frame.pack(side='top', fill='x')
label_welcome = tk.Label(label_welcome_frame, font=("Arial",18,"bold"),
bg=MAIN_BG_COLOR, text="Willkommen bei AddyBs dem Adressbuch!")
label_welcome.pack(pady=10)
# Label: Suche
label_suche_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_suche_frame.pack(side='top', fill='x')
label_suche = tk.Label(label_suche_frame, text="Suche", font=("Arial",
"12", "underline"), bg=MAIN_BG_COLOR)
label_suche.pack(anchor='center')
# Entry: Suche
# Button: Suche
search_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
search_frame.pack(side='top', fill='x', pady=10)
entry_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
entry_search_frame.pack(side='left', fill='x', expand='yes')
button_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
button_search_frame.pack(side='right', fill='x', expand='yes')
entry_search = tk.Entry(entry_search_frame, width=20)
entry_search.pack(side='right', padx=4)
button_search = tk.Button(button_search_frame,text="Suche starten",
command=None)
button_search.pack(side='left', padx=4)
entry_search_frame.propagate(0)
entry_search_frame.config(height=entry_search.winfo_reqheight())
button_search_frame.propagate(0)
button_search_frame.config(height=button_search.winfo_reqheight())
# Fensterschleife
window.mainloop()
Bitte die horizontale Position der beiden Widgets 'entry_search' und 'button_search' beachten!
Hier das Skript ohne Abschaltung der Geometrie-Steuerung:
Code: Alles auswählen
# coding: UTF-8
#imports
import Tkinter as tk
import anydbm
import sqlite3
MAIN_BG_COLOR = "#cde66a"
if __name__ == "__main__":
#Fenstererstellung
window = tk.Tk()
window.config(bg=MAIN_BG_COLOR)
window.geometry("800x200")
# Hauptrahmen
window_frame = tk.Frame(window, bg=MAIN_BG_COLOR)
window_frame.pack(side='top', fill='both', expand='yes')
#--- Erstellung des Fenster-Layouts ---#
# Label: Begruessung
label_welcome_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_welcome_frame.pack(side='top', fill='x')
label_welcome = tk.Label(label_welcome_frame, font=("Arial",18,"bold"),
bg=MAIN_BG_COLOR, text="Willkommen bei AddyBs dem Adressbuch!")
label_welcome.pack(pady=10)
# Label: Suche
label_suche_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_suche_frame.pack(side='top', fill='x')
label_suche = tk.Label(label_suche_frame, text="Suche", font=("Arial",
"12", "underline"), bg=MAIN_BG_COLOR)
label_suche.pack(anchor='center')
# Entry: Suche
# Button: Suche
search_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
search_frame.pack(side='top', fill='x', pady=10)
entry_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
entry_search_frame.pack(side='left', fill='x', expand='yes')
button_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
button_search_frame.pack(side='right', fill='x', expand='yes')
entry_search = tk.Entry(entry_search_frame, width=20)
entry_search.pack(side='right', padx=4)
button_search = tk.Button(button_search_frame,text="Suche starten",
command=None)
button_search.pack(side='left', padx=4)
#entry_search_frame.propagate(0)
#entry_search_frame.config(height=entry_search.winfo_reqheight())
#button_search_frame.propagate(0)
#button_search_frame.config(height=button_search.winfo_reqheight())
# Fensterschleife
window.mainloop()
Bitte wieder die horizontale Position der beiden Widgets 'entry_search' und 'button_search' beachten!
Hier noch das Skript mit Abschaltung der Geometrie-Steuerung aber ohne das setzen der Option 'height' der Widgets 'entry_search' und 'button_search':
Code: Alles auswählen
# coding: UTF-8
#imports
import Tkinter as tk
import anydbm
import sqlite3
MAIN_BG_COLOR = "#cde66a"
if __name__ == "__main__":
#Fenstererstellung
window = tk.Tk()
window.config(bg=MAIN_BG_COLOR)
window.geometry("800x200")
# Hauptrahmen
window_frame = tk.Frame(window, bg=MAIN_BG_COLOR)
window_frame.pack(side='top', fill='both', expand='yes')
#--- Erstellung des Fenster-Layouts ---#
# Label: Begruessung
label_welcome_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_welcome_frame.pack(side='top', fill='x')
label_welcome = tk.Label(label_welcome_frame, font=("Arial",18,"bold"),
bg=MAIN_BG_COLOR, text="Willkommen bei AddyBs dem Adressbuch!")
label_welcome.pack(pady=10)
# Label: Suche
label_suche_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
label_suche_frame.pack(side='top', fill='x')
label_suche = tk.Label(label_suche_frame, text="Suche", font=("Arial",
"12", "underline"), bg=MAIN_BG_COLOR)
label_suche.pack(anchor='center')
# Entry: Suche
# Button: Suche
search_frame = tk.Frame(window_frame, bg=MAIN_BG_COLOR)
search_frame.pack(side='top', fill='x', pady=10)
entry_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
entry_search_frame.pack(side='left', fill='x', expand='yes')
button_search_frame = tk.Frame(search_frame, bg=MAIN_BG_COLOR)
button_search_frame.pack(side='right', fill='x', expand='yes')
entry_search = tk.Entry(entry_search_frame, width=20)
entry_search.pack(side='right', padx=4)
button_search = tk.Button(button_search_frame,text="Suche starten",
command=None)
button_search.pack(side='left', padx=4)
entry_search_frame.propagate(0)
# entry_search_frame.config(height=entry_search.winfo_reqheight())
button_search_frame.propagate(0)
# button_search_frame.config(height=button_search.winfo_reqheight())
# Fensterschleife
window.mainloop()
Die Höhe der Frames für 'entry_search' und 'button_search': ist nicht gesetzt! Nur als horizontale Striche sichtbar.
Hoffe dir ein wenig geholfen zu haben. Ob mein Weg der einzige ist weis ich nicht.
Gruss wuf
