2016-09-29 130 views
0

下面的代碼將設置默認樣式:修復TTK覆蓋Tkinter的標籤和按鈕的字體/樣式

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

,看起來像這樣:

correct look

但是,如果取消註釋第二行,結果如下:

wrong look

顯然,tkinter.ttk將用忽略root.option_add()的對象覆蓋LabelButton的字體樣式。

知道我只需要Treeviewttk,我可以簡單地將第二行更改爲from tkinter.ttk import Treeview以避免此問題。然而,控制局勢而不是避免局勢是有益的。

如何更改LabelButton字體和樣式在from tkinter.ttk import *之後?

回答

0

相反, import tkinter as tk, 和使用這種方式: tk.Label

1

顯然,tkinter.ttk覆蓋標籤和按鈕 的字體樣式與忽略root.option_add()對象。

進口不會覆蓋風格,它覆蓋部件。當你做Label(...)Button(...)你得到一個ttk部件而不是tk部件,因爲你最後導入了這個庫。 ttk小部件不會兌現tk小部件的所有相同選項。

如果您想更改ttk小部件的字體和樣式,則必須使用ttk樣式機制來完成此操作。欲瞭解更多信息,請參閱Styles and Themes on tkdocs.com

這是你不應該使用通配符導入的原因之一 - 它使得很難準確理解你正在使用或打算使用哪種類型的小部件,並且不可能在同一個應用程序中使用這兩種類型。

導入tkinter和tk的最佳方式是導入模塊,並將模塊名稱用作前綴。我建議導入Tkinter的 「傳統知識」,這樣的前綴是短暫的:

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