# main.py
import tkinter as tk
from tkinter import ttk
import random
class MainApplication:
def __init__(self, root):
self.root = root
self.root.title("Hauptfenster")
self.root.geometry("400x300")
# Stil für ein einfaches, modernes Aussehen
style = ttk.Style()
style.configure('Modern.TButton',
padding=10,
font=('Helvetica', 10))
self.header = ttk.Label(
root,
text="Toplevel-Fenster Demo",
font=('Helvetica', 16, 'bold'),
padding=20
)
self.header.pack()
self.create_buttons()
self.child_windows = []
self.center_window(self.root)
def create_buttons(self):
buttons_frame = ttk.Frame(self.root, padding="20")
buttons_frame.pack(fill=tk.BOTH, expand=True)
ttk.Button(
buttons_frame,
text="Einfaches Fenster öffnen",
style='Modern.TButton',
command=self.create_basic_window
).pack(pady=5, fill=tk.X)
ttk.Button(
buttons_frame,
text="Modales Fenster öffnen",
style='Modern.TButton',
command=self.create_modal_window
).pack(pady=5, fill=tk.X)
ttk.Button(
buttons_frame,
text="Positioniertes Fenster öffnen",
style='Modern.TButton',
command=self.create_positioned_window
).pack(pady=5, fill=tk.X)
ttk.Button(
buttons_frame,
text="Transientes Fenster öffnen",
style='Modern.TButton',
command=self.create_transient_window
).pack(pady=5, fill=tk.X)
def create_basic_window(self):
window = tk.Toplevel(self.root)
window.title("Einfaches Fenster")
window.geometry("300x200")
ttk.Label(
window,
text="Dies ist ein einfaches Toplevel-Fenster",
padding=20
).pack()
ttk.Button(
window,
text="Schließen",
command=window.destroy
).pack(pady=10)
self.child_windows.append(window)
window.protocol("WM_DELETE_WINDOW",
lambda: self.cleanup_window(window))
def create_modal_window(self):
window = tk.Toplevel(self.root)
window.title("Modales Fenster")
window.geometry("300x200")
# Modal machen
window.grab_set()
window.transient(self.root)
ttk.Label(
window,
text="Dieses Fenster muss geschlossen werden,\nbevor das Hauptfenster verwendet werden kann",
padding=20
).pack()
ttk.Button(
window,
text="Schließen",
command=window.destroy
).pack(pady=10)
def create_positioned_window(self):
window = tk.Toplevel(self.root)
window.title("Positioniertes Fenster")
window.geometry("300x200")
# Zufällige Position auf dem Bildschirm
x = random.randint(0, self.root.winfo_screenwidth() - 300)
y = random.randint(0, self.root.winfo_screenheight() - 200)
window.geometry(f"+{x}+{y}")
ttk.Label(
window,
text="Dieses Fenster erscheint an einer zufälligen Position",
padding=20
).pack()
ttk.Button(
window,
text="Schließen",
command=window.destroy
).pack(pady=10)
self.child_windows.append(window)
window.protocol("WM_DELETE_WINDOW",
lambda: self.cleanup_window(window))
def create_transient_window(self):
window = tk.Toplevel(self.root)
window.title("Transientes Fenster")
window.geometry("300x200")
# Über dem Hauptfenster halten
window.transient(self.root)
ttk.Label(
window,
text="Dieses Fenster bleibt immer\nüber dem Hauptfenster",
padding=20
).pack()
ttk.Button(
window,
text="Schließen",
command=window.destroy
).pack(pady=10)
self.child_windows.append(window)
window.protocol("WM_DELETE_WINDOW",
lambda: self.cleanup_window(window))
def cleanup_window(self, window):
if window in self.child_windows:
self.child_windows.remove(window)
window.destroy()
def center_window(self, window):
window.update_idletasks()
width = window.winfo_width()
height = window.winfo_height()
x = (window.winfo_screenwidth() // 2) - (width // 2)
y = (window.winfo_screenheight() // 2) - (height // 2)
window.geometry(f'+{x}+{y}')
if __name__ == "__main__":
root = tk.Tk()
app = MainApplication(root)
root.mainloop()