77from vcf_generator_lite import resources
88from vcf_generator_lite .theme import create_platform_theme
99from vcf_generator_lite .util .tkinter .misc import ScalingMiscExtension
10- from vcf_generator_lite .util .tkinter .theme import Theme
10+ from vcf_generator_lite .util .tkinter .theme import EnhancedTheme
1111from vcf_generator_lite .util .tkinter .window import CenterWindowExtension , GcWindowExtension , GeometryWindowExtension , \
1212 WindowExtension , WindowingSystemWindowExtension , withdraw_cm
13- from vcf_generator_lite .window .base .constants import EVENT_EXIT
13+ from vcf_generator_lite .window .base .constants import EVENT_ENHANCED_THEME_CHANGED , EVENT_EXIT
1414
1515__all__ = ["ExtendedTk" , "ExtendedToplevel" , "ExtendedDialog" ]
1616_logger = logging .getLogger (__name__ )
@@ -49,6 +49,7 @@ def __apply_default_events(self):
4949
5050
5151class ExtendedTk (Tk , AppWindowExtension , ABC ):
52+ theme : EnhancedTheme
5253
5354 def __init__ (self , ** kw ):
5455 # __init__中加载的配置文件中可能需要设置主题,因此必须先设置标志
@@ -66,8 +67,11 @@ def _configure_ui_withdraw(self):
6667 def __apply_default_icon (self ):
6768 self .iconphoto (True , PhotoImage (master = self , data = resources .read_binary ("images/icon-48.png" )))
6869
69- def set_theme (self , theme : Theme ):
70- theme .apply_theme (self , Style (self ))
70+ def set_theme (self , theme : EnhancedTheme ):
71+ self .theme = theme
72+ theme .apply_tk (self , Style (self ))
73+ theme .apply_window (self , Style (self ))
74+ self .event_generate (EVENT_ENHANCED_THEME_CHANGED , )
7175 self ._theme_applied = True
7276
7377
@@ -76,11 +80,18 @@ def __init__(self, master: Tk | Toplevel, **kw):
7680 super ().__init__ (master , ** kw )
7781 AppWindowExtension .__init__ (self )
7882
83+ @override
84+ def _configure_ui_withdraw (self ):
85+ super ()._configure_ui_withdraw ()
86+ self .__apply_theme ()
7987
80- class ExtendedDialog (Toplevel , AppWindowExtension , ABC ):
81- def __init__ (self , master : Tk | Toplevel , ** kw ):
82- super ().__init__ (master , ** kw )
83- AppWindowExtension .__init__ (self )
88+ def __apply_theme (self ):
89+ root : ExtendedTk = self .nametowidget ("." )
90+ root .theme .apply_window (self , Style (self ))
91+ root .bind (EVENT_ENHANCED_THEME_CHANGED , lambda _ : root .theme .apply_window (self , Style (self )))
92+
93+
94+ class ExtendedDialog (ExtendedToplevel , ABC ):
8495
8596 @override
8697 def _configure_ui_withdraw (self ):
0 commit comments