You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:20:50