Tkinter/Ttkbootstrap切换主题后字体大小恢复默认问题求助
解决ttkbootstrap主题切换后字体大小重置的问题
核心问题在于:切换主题时,ttkbootstrap会加载对应主题的默认样式配置,覆盖你之前设置的全局字体样式。而初始主题(darkly)因为启动时被你修改过样式,所以切回时会保留修改后的字体,其他未被手动修改的主题则使用默认字体值。
解决方法
每次切换主题后,重新应用你的自定义字体配置即可,无需销毁实例。修改change_theme函数,在切换主题后再次调用style.configure()设置全局字体:
def change_theme(event): t = combo.get() style.theme_use(t) # 切换主题后重新设置全局字体样式 style.configure('.', font=('TkDefaultFont', 20))
修改后的完整代码
import tkinter as tk import ttkbootstrap as tb DEFAULT_FONT = ('TkDefaultFont', 20) def change_theme(event): t = combo.get() style.theme_use(t) # 重新应用自定义字体 style.configure('.', font=DEFAULT_FONT) app = tb.Window(title='Font Weirdness', themename='darkly') style = app.style style.configure('.', font=DEFAULT_FONT) button = tb.Button(app, text='Hello') button.pack(pady=20) combo = tb.Combobox(app, values=tb.Style().theme_names()) combo.pack(pady=20) combo.bind('<<ComboboxSelected>>', change_theme) app.position_center() app.mainloop()
额外说明
如果需要针对特定组件设置单独字体,也可以在切换主题后单独配置,比如:
style.configure('TButton', font=('Arial', 18))
内容的提问来源于stack exchange,提问作者blaufer
相关产品推荐
相关产品推荐

