基于effbot.org's example,以下代码将设置默认样式:
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()
看起来像这样:
但是,如果取消注释第二行,结果将如下:
显然,tkinter.ttk
会使用忽略Label
的对象覆盖Button
和root.option_add()
的字体样式。
我知道Treeview
只需要ttk
,我只需将第二行更改为from tkinter.ttk import Treeview
即可避免此问题。但是,控制局势而不是避免局势是有用的。
如何在Label
之后更改Button
和from tkinter.ttk import *
字体和样式?
答案 0 :(得分:1)
显然,tkinter.ttk会覆盖Label和Button的字体样式 使用忽略root.option_add()的对象。
导入不会覆盖样式,它会覆盖小部件。当您执行Label(...)
或Button(...)
时,您将获得ttk小部件而不是tk小部件,因为您最后导入了该库。 ttk小部件不会尊重与tk小部件相同的所有选项。
如果要更改ttk小部件的字体和样式,必须使用ttk样式机制。有关详细信息,请参阅Styles and Themes上的tkdocs.com。
这是您不应该使用通配符导入的原因之一 - 这使您很难准确理解您正在使用或打算使用哪种类型的小部件,并且无法在两种类型中使用相同的申请。
导入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小部件是这样的:
ttk.Button(...)
ttk.Label(...)
ttk.Treeview(...)
答案 1 :(得分:0)
相反,
import tkinter as tk
,
并以这种方式使用它:
tk.Label
等。