解决在tkbootstrap下ttk组件不支持直接使用font参数/无法修改字体的问题
省流
使用Style.configure()
# 设置所有Button的font
style = ttk.Style()
# 如果已有style 如:style = ttk.Style("cyborg"),则无需重复创建style
style.configure("TButton", font=("DIN1451", 10))
# 所有的按钮组件都会使用字体DIN1451,字体大小为10
正文
栗子🌰:
test.py:
import tkinter as tk
import tkinter as ttk
win = tk.Tk()
win.geometry('1060x700')
quit_button = ttk.Button(win, text="Exit", command=win.quit, width=5, font="DIN1451")
quit_button.pack()
win.mainloop()
test2.py:
import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
win = tk.Tk()
win.geometry('1060x700')
quit_button = ttk.Button(win, text="Exit", command=win.quit, width=5, font="DIN1451")
quit_button.pack()
win.mainloop()
前者运行起来没有任何问题,但后者会:
Traceback (most recent call last):
File "/data/data/com.termux/files/home/new_time/main.py", line 54, in <module>
quit_button = ttk.Button(win, text="Exit", command=win.quit, width=5, font="DIN1451")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/ttkbootstrap/style.py", line 5288, in __init__
func(self, *args, **kwargs)
File "/data/data/com.termux/files/usr/lib/python3.12/tkinter/ttk.py", line 582, in __init__
Widget.__init__(self, master, "ttk::button", kw)
File "/data/data/com.termux/files/usr/lib/python3.12/tkinter/ttk.py", line 527, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
File "/data/data/com.termux/files/usr/lib/python3.12/tkinter/__init__.py", line 2661, in __init__
self.tk.call(
_tkinter.TclError: unknown option "-font"
说明tkbootstrap不支持使用font参数,但是,通过阅读python官方文档tkinter.ttk章节可知,我们可以尝试用style.configure()覆盖tkbootstrap的主题配置:
import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
win = tk.Tk()
win.geometry('1060x700')
style = ttk.Style()
style.configure("TButton", font=("DIN1451", 10))
quit_button = ttk.Button(win, text="Exit", command=win.quit, width=5)
quit_button.pack()
win.mainloop()
解决!
注意,以下方法对于tkbootstrap不会奏效
style.configure("BW.TButton", font=("DIN1451", 10))
quit_button = ttk.Button(win, text="Exit", command=win.quit, width=5, bootstyle="BW.TButton")

浙公网安备 33010602011771号