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(...)