在不使用内置主题的情况下更改 ttk.Progressbar 颜色

Change ttk.Progressbar colour without using a built in theme

我正在使用一个与标签配对的进度条来提供一个进度条,该进度条在给定一个值时会更新一个百分比。我试图让进度条在达到特定阈值时改变颜色(目前只是在每个季度)。

我做了一些阅读,发现我可以使用 ttk.Style 来做到这一点,而且我已经开始工作了。但是,我 运行 遇到的问题是,更改样式以使用主题会更改我父 UI 中的其他 ttk 小部件,这是应该的。这不是我想要的,因为我只想更改进度条的颜色。但是,当我尝试在不使用主题的情况下创建样式时,进度条的颜色不会改变。任何帮助将不胜感激。小部件的代码是:

import tkinter as tk
import tkinter.ttk as ttk

class ProgressBarPercent(tk.Frame):
    def __init__(self, parent, orient, length, mode):
        tk.Frame.__init__(self, parent)
        self.root = parent

        # ttk style
        self.style = ttk.Style()
##        self.style.theme_use("clam")
        self.style.configure("green.Horizontal.TProgressbar", foreground="green", background="green")
        self.style.configure("blue.Horizontal.TProgressbar", foreground="blue", background="blue")
        self.style.configure("yellow.Horizontal.TProgressbar", foreground="yellow", background="yellow")
        self.style.configure("orange.Horizontal.TProgressbar", foreground="orange", background="orange")
        self.style.configure("red.Horizontal.TProgressbar", foreground="red", background="red")
        
        # Progressbar, percent label
        self.progress = ttk.Progressbar(self, orient = orient, 
              length = length, mode = mode, style = "orange.Horizontal.TProgressbar")
        self.text = tk.StringVar()
        self.text.set("0%")
        self.percent = tk.Label(self, textvariable = self.text)
        self.percent.grid(column=0, row=0)
        self.progress.grid(column=1, row=0)

    def value(self, value):
        # Progressbar updates based on input value
        self.progress['value'] = value
        percent_value = round(value, 1)
        self.text.set(str(percent_value) + '%')
        alert = False
        if value < 25:
            self.progress.configure(style = "green.Horizontal.TProgressbar")
        elif 25 <= value < 50:            
            self.progress.configure(style = "blue.Horizontal.TProgressbar")
        elif 50 <= value < 75:            
            self.progress.configure(style = "yellow.Horizontal.TProgressbar")
        elif 75 <= value <= 100:            
            self.progress.configure(style = "orange.Horizontal.TProgressbar")
        elif 100 <= value:
            alert = True
            self.progress.configure(style = "red.Horizontal.TProgressbar")
        self.alert(alert)

    def alert(self, alert):
        if alert == True:
            self.percent.configure(fg = 'red')
        else:
            self.percent.configure(fg = 'black')


if __name__ == "__main__":
    root = tk.Tk()

    progress = ProgressBarPercent(root, orient = tk.HORIZONTAL, 
                  length = 100, mode = 'determinate') 

    progress.grid()
    progress.value(67.322)

    root.mainloop()

如果您只想改变颜色,则不需要 5 种不同的新样式。您可以配置一个,以获得不同的颜色

        if value < 25:
            self.style.configure("TProgressbar", foreground="green", background="green")
        elif 25 <= value < 50:
            self.style.configure("TProgressbar", foreground="blue", background="blue")
        elif 50 <= value < 75:
            self.style.configure("TProgressbar", foreground="yellow", background="yellow")
        elif 75 <= value <= 100:
            self.style.configure("TProgressbar", foreground="orange", background="orange")
        elif 100 <= value:
            alert = True
            self.style.configure("TProgressbar", foreground="red", background="red")