如何让Tkinter默认字体配置生效到所有已创建的Tk窗口
问题根因
Tkinter 中每一个tk.Tk()实例都会初始化独立的 Tcl 运行上下文,内置的TkDefaultFont配置是各上下文独立维护的,因此全局只修改一次默认字体,只会对当前生效的上下文对应的窗口生效,其余窗口不会继承配置。
另外注意:同时创建多个tk.Tk()实例属于非最佳实践,绝大多数场景下额外窗口都应该用tk.Toplevel实现,所有Toplevel会共享根Tk实例的上下文配置,避免多上下文带来的各类奇怪问题。
解决方案1:推荐方案,将额外窗口改为Toplevel实现
仅保留一个tk.Tk()作为主窗口,其余窗口改为tk.Toplevel(),修改一次默认字体即可全局生效:
import tkinter as tk from tkinter import font as tkFont font = "你需要配置的字体名称" # 仅保留一个Tk根窗口 gui = tk.Tk() # 额外窗口用Toplevel创建 calibration = tk.Toplevel(gui) defaultFont = tkFont.nametofont("TkDefaultFont") defaultFont.configure(family=font, size=9) gui.mainloop()
解决方案2:必须使用多Tk实例的特殊场景
如果业务逻辑确实需要创建多个独立的tk.Tk()实例,则需要分别为每个实例的上下文配置默认字体,通过nametofont的root参数指定对应的窗口实例即可:
import tkinter as tk from tkinter import font as tkFont font = "你需要配置的字体名称" gui = tk.Tk() calibration = tk.Tk() # 遍历所有Tk实例分别配置默认字体 for root in [gui, calibration]: defaultFont = tkFont.nametofont("TkDefaultFont", root=root) defaultFont.configure(family=font, size=9) gui.mainloop()
内容的提问来源于stack exchange,提问作者Waise
相关产品推荐
相关产品推荐

