Python 3.x 修复ttk覆盖tkinter标签和按钮字体/样式

Python 3.x 修复ttk覆盖tkinter标签和按钮字体/样式,python-3.x,tkinter,ttk,Python 3.x,Tkinter,Ttk,基于以下代码将设置默认样式: from tkinter import * #from tkinter.ttk import * root = Tk() root.option_add("*Font", "courier") root.option_add("*Label.Font", "helvetica 20 bold") root.option_add("*Background", "brown") root.config(background="light blue") Label(

基于以下代码将设置默认样式:

from tkinter import *
#from tkinter.ttk import *

root = Tk()

root.option_add("*Font", "courier")
root.option_add("*Label.Font", "helvetica 20 bold")
root.option_add("*Background", "brown")
root.config(background="light blue")

Label(root, text="lbl").pack()
Button(root, text="bttn").pack()
Message(root, text="msg").pack()

root.mainloop()
看起来是这样的:

tk.Button(...)
tk.Label(...)
ttk.Button(...)
ttk.Label(...)
ttk.Treeview(...)

但是,如果取消注释第二行,结果如下:

tk.Button(...)
tk.Label(...)
ttk.Button(...)
ttk.Label(...)
ttk.Treeview(...)

显然,
tkinter.ttk
用忽略
root.option\u add()
的对象覆盖了
标签和
按钮的字体样式

知道我只需要
ttk
中的
Treeview
,我可以简单地将第二行从tkinter.ttk import Treeview更改为
,以避免问题。然而,控制局势而不是避免局势将是有益的

如何从tkinter.ttk import*
更改
标签和
按钮后的
字体和样式,
将tkinter作为tk导入,
并以这种方式使用它:
tk.标签

显然,tkinter.ttk会覆盖标签和按钮的字体样式 具有忽略root.option_add()的对象

导入不会覆盖样式,而是覆盖小部件。当您执行
标签(…)
按钮(…)
时,您得到的是一个ttk小部件,而不是自上次导入该库以来的tk小部件。ttk小部件不支持与tk小部件相同的所有选项

如果要更改ttk小部件的字体和样式,必须使用ttk样式设置机制。有关详细信息,请参见

这就是为什么不应该使用通配符导入的原因之一——这使得您很难准确地理解正在使用或打算使用哪种类型的小部件,并且不可能在同一个应用程序中同时使用这两种类型的小部件

导入tkinter和tk的最佳方法是导入模块,并使用模块名称作为前缀。我建议将tkinter“作为tk”导入,以便前缀较短:

# python 2.x
import Tkinter as tk
import ttk

# python 3.x
import tkinter as tk
from tkinter import ttk
然后,您可以像这样使用tk小部件:

tk.Button(...)
tk.Label(...)
ttk.Button(...)
ttk.Label(...)
ttk.Treeview(...)
ttk小部件如下所示:

tk.Button(...)
tk.Label(...)
ttk.Button(...)
ttk.Label(...)
ttk.Treeview(...)