From 5cc9dab8cc20db5650e5b63da2b37c4931d1f8ad Mon Sep 17 00:00:00 2001 From: Xiaokang2022 <2951256653@qq.com> Date: Wed, 8 Jan 2025 05:40:44 +0800 Subject: [PATCH] fix: Fix a bug where style switch of `containers.Tk` does not automatically take effect on child windows style: Improve some codes --- tkintertools/core/containers.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tkintertools/core/containers.py b/tkintertools/core/containers.py index 901ce1f0..aade895d 100644 --- a/tkintertools/core/containers.py +++ b/tkintertools/core/containers.py @@ -21,6 +21,7 @@ import platform import tkinter import tkinter.font +import traceback import typing import typing_extensions @@ -179,9 +180,10 @@ def theme( manager.apply_theme(self, theme="dark" if dark else "normal") if include_children: - for child in self.children: + for child in self.children.values(): if isinstance(child, Toplevel): - child.theme(dark, include_canvases=include_canvases) + child.theme(dark, include_canvases=include_canvases, + include_children=True) if include_canvases: for canvas in self.canvases: @@ -291,15 +293,16 @@ def at_exit( * `ensure_destroy`: whether the window is guaranteed to be closed """ def wrapper() -> None: - try: # There is no need to catch errors + try: command() + except Exception as exc: # pylint: disable=W0718 + traceback.print_exception(exc) finally: if ensure_destroy: self.destroy() self.wm_protocol("WM_DELETE_WINDOW", wrapper) - class Toplevel(tkinter.Toplevel, Tk, Misc): """Toplevel window. @@ -486,7 +489,6 @@ def _initialization(self) -> None: case "s": dx, dy = self.init_size[0], self.init_size[1]//2 case "se": dx, dy = self.init_size[0], self.init_size[1] case "center": dx, dy = self.init_size[0]//2, self.init_size[1]//2 - case _: dx, dy = 0, 0 self.init_position = self.winfo_x() + dx, self.winfo_y() + dy self._position = self.init_position