簡體   English   中英

更改 ttk 小部件文本顏色

[英]Changing ttk widget text color

我到處搜索,但還沒有找到一個簡單的例子來展示如何更改 ttk 小部件樣式的次要元素並動態應用它(在小部件創建之后)。

我有一些 ttk checkbuttons 代表一些配置項,以及一個用於更新遠程系統的 ttk 按鈕。 檢查按鈕被初始化為遠程系統的 state。

如果用戶修改了任何一個復選按鈕,我希望復選按鈕文本和更新按鈕文本都變成紅色,以提醒用戶復選按鈕 state 不再匹配遠程 state,應該按下更新按鈕發送修改遠程系統的配置。

按下更新按鈕時,更新按鈕和所有復選按鈕的文本顏色恢復為黑色。

我知道這是可能的(而且可能很容易),但是怎么做呢?

編輯:修改背景顏色也可以。

您需要創建自定義樣式,然后將該樣式應用到小部件。 要創建自定義樣式,首先獲取ttk.Style的實例,然后使用configure方法從現有樣式派生新樣式。 以下示例創建一個名為“Red.TCheckbutton”的新樣式:

style = ttk.Style()
style.configure("Red.TCheckbutton", foreground="red")

接下來,當您想要更改顏色時,只需將此樣式與小部件關聯:

my_checkbutton.configure(style="Red.TCheckbutton")

學習如何使用 ttk 樣式的最佳資源是tkdocs.com 具體來說, https://www.tkdocs.com/tutorial/styles.html

這是一個完整的工作示例:

import ttk
import Tkinter as tk

class ExampleApp(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.var1 = tk.StringVar()
        self.var2 = tk.StringVar()

        f1 = ttk.Frame(self)
        red_button = ttk.Button(f1, text="Red", command=self.make_red)
        default_button = ttk.Button(f1, text="Default", command=self.make_default)

        red_button.pack(side="left")
        default_button.pack(side="left")

        f2 = ttk.Frame(self)
        self.cb_one = ttk.Checkbutton(f2, text="Option 1", variable=self.var1,
                                      onvalue=1, offvalue=0)
        self.cb_two  = ttk.Checkbutton(f2, text="Option 2", variable=self.var2,
                                       onvalue=1, offvalue=0)
        self.cb_one.pack(side="left")
        self.cb_two.pack(side="left")

        f1.pack(side="top", fill="x")
        f2.pack(side="top", fill="x")

        style = ttk.Style()
        style.configure("Red.TCheckbutton", foreground="red")

    def make_red(self):
        self.cb_one.configure(style="Red.TCheckbutton")
        self.cb_two.configure(style="Red.TCheckbutton")

    def make_default(self):
        self.cb_one.configure(style="TCheckbutton")
        self.cb_two.configure(style="TCheckbutton")


if __name__ == "__main__":
    root = tk.Tk()
    ExampleApp(root).pack(fill="both", expand=True)
    root.mainloop()

您可以使用以下方法更改背景顏色:

import tkinter as tk
root = tk.Tk()

root.configure(bg='blue')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM