Tkinter 主題
當前的 Tk
元件主題功能是新元件集最強大和令人興奮的功能之一。但是,這也是最令人困惑的事情之一。
本教程演示了主題的樣式,它控制了元件在 Tkinter GUI 中的外觀。換句話說,我們可以說按鈕外觀和其他元件應該是什麼樣子。
Tkinter GUI 中的主題
這是一組樣式,用於定義 GUI 中的每個元件的外觀。主題修改增強了 GUI 外觀,與普通的 Tkinter GUI 外觀不同。
然而,在它被刪除之前,很少有應用程式會從可能不同的運動、遊戲或教育計劃等不斷變化的主題中受益。
不同平臺的主題可能不同,尤其是 macOS 和 Windows。Tkinter 允許你將當前主題更改為另一個主題。
如果你將當前主題更改為新主題,Tkinter 會將樣式應用於所有 ttk
元件。我們需要建立一個 ttk.Style
類的例項來獲取主題。
style = ttk.Style(window)
Style
幫助使用者避免冗餘和重複的程式碼。
如果你的應用中有 20 個按鈕元件,則建立一個 style
物件,那麼你無需在建立元件時重複外觀細節。這樣,元件看起來很時尚。
由於 style
將有關外觀的所有資訊收集在一個位置,因此其他元件的按鈕樣式和樣式可以共享共同特徵,從而提高一致性和重用性。
我們需要使用 theme_use()
方法獲取可用主題並列印可用主題。
print(style.theme_names())
輸出:
('winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative')
如果我們需要獲取當前主題,我們可以使用 theme_use()
方法來使用它。
style.theme_use()
我們可以使用 selected_theme
類選擇其他主題來使用不同的主題; get()
方法將有助於獲得該主題。
style.theme_use(window.selected_theme.get())
我們在這個迴圈中生成了多個 Radiobutton
,它們儲存主題名稱並在每次迭代時獲取單獨的值。
for theme_name in style.theme_names():
# Create a bulk of radio buttons using loop
radio_buttons = ttk.Radiobutton(
theme_frame,
text=theme_name,
value=theme_name,
variable=window.selected_theme,
command=theme_changer,
)
radio_buttons.pack(expand=True, fill="both")
command
選項持有 theme_changer
函式以在使用者選擇單選按鈕時呼叫。
此函式將使用 e
在 Radiobutton
元件選項中傳遞的 StringVar()
類更改主題。
def theme_changer():
# Change theme
style.theme_use(window.selected_theme.get())
完整原始碼:
from tkinter import *
from tkinter import ttk
# Create GUI window
window = Tk()
window.title("Delftstack")
window.geometry("500x400")
# create style object
style = ttk.Style(window)
def theme_changer():
# Change theme
style.theme_use(window.selected_theme.get())
label = ttk.Label(window, text="Name:")
label.grid(column=0, row=0, padx=10, pady=10, sticky="w")
entry = ttk.Entry(window)
entry.grid(column=1, row=0, padx=10, pady=10, sticky="w")
button = ttk.Button(window, text="press")
button.grid(column=2, row=0, padx=10, pady=10, sticky="w")
window.selected_theme = StringVar()
theme_frame = ttk.LabelFrame(window, text="Themes")
theme_frame.grid(padx=10, pady=10, ipadx=20, ipady=20, sticky="w")
for theme_name in style.theme_names():
# Create a bulk of radio buttons using loop
radio_buttons = ttk.Radiobutton(
theme_frame,
text=theme_name,
value=theme_name,
variable=window.selected_theme,
command=theme_changer,
)
radio_buttons.pack(expand=True, fill="both")
window.mainloop()
print(style.theme_names())
輸出:
點選這裡閱讀更多關於 Tkinter 主題的資訊。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn