SXXXXXXX_RadarDataReader/radar_data_reader/gui/gui_utils.py
2025-06-24 14:37:36 +02:00

56 lines
1.9 KiB
Python

# radar_data_reader/gui/gui_utils.py
"""
GUI utility functions, such as window centering logic, that can be reused
across different parts of the application or other projects.
"""
import tkinter as tk
from typing import Optional
def center_window(
window: tk.Tk | tk.Toplevel, parent: Optional[tk.Tk | tk.Toplevel] = None
):
"""
Centers a Tkinter window on the screen or relative to a parent window.
This function should be called after the window's initial size has been
set or determined, typically after creating all its widgets. Using
`window.update_idletasks()` right before this call ensures that the
window's dimensions are up-to-date.
Args:
window: The Tkinter window (tk.Tk or tk.Toplevel) to be centered.
parent: The optional parent window. If provided, `window` will be
centered relative to the parent. If None, `window` will be
centered on the screen.
"""
window.update_idletasks() # Ensure window dimensions are calculated
# Get window's dimensions
win_width = window.winfo_width()
win_height = window.winfo_height()
if parent:
# Center relative to the parent window
parent.update_idletasks()
parent_x = parent.winfo_x()
parent_y = parent.winfo_y()
parent_width = parent.winfo_width()
parent_height = parent.winfo_height()
pos_x = parent_x + (parent_width // 2) - (win_width // 2)
pos_y = parent_y + (parent_height // 2) - (win_height // 2)
else:
# Center on the screen
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
pos_x = (screen_width // 2) - (win_width // 2)
pos_y = (screen_height // 2) - (win_height // 2)
# Set the window's position
window.geometry(f"{win_width}x{win_height}+{pos_x}+{pos_y}")
window.deiconify() # Ensure window is visible