7
7
from vcf_generator_lite import resources
8
8
from vcf_generator_lite .theme import create_platform_theme
9
9
from 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
11
11
from vcf_generator_lite .util .tkinter .window import CenterWindowExtension , GcWindowExtension , GeometryWindowExtension , \
12
12
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
14
14
15
15
__all__ = ["ExtendedTk" , "ExtendedToplevel" , "ExtendedDialog" ]
16
16
_logger = logging .getLogger (__name__ )
@@ -49,6 +49,7 @@ def __apply_default_events(self):
49
49
50
50
51
51
class ExtendedTk (Tk , AppWindowExtension , ABC ):
52
+ theme : EnhancedTheme
52
53
53
54
def __init__ (self , ** kw ):
54
55
# __init__中加载的配置文件中可能需要设置主题,因此必须先设置标志
@@ -66,8 +67,11 @@ def _configure_ui_withdraw(self):
66
67
def __apply_default_icon (self ):
67
68
self .iconphoto (True , PhotoImage (master = self , data = resources .read_binary ("images/icon-48.png" )))
68
69
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 , )
71
75
self ._theme_applied = True
72
76
73
77
@@ -76,11 +80,18 @@ def __init__(self, master: Tk | Toplevel, **kw):
76
80
super ().__init__ (master , ** kw )
77
81
AppWindowExtension .__init__ (self )
78
82
83
+ @override
84
+ def _configure_ui_withdraw (self ):
85
+ super ()._configure_ui_withdraw ()
86
+ self .__apply_theme ()
79
87
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 ):
84
95
85
96
@override
86
97
def _configure_ui_withdraw (self ):
0 commit comments