使用刻度更新 Python 中进度条的颜色?

Update the color of a progress bar in Python using a scale?

我有一个进度条,它会根据我将比例尺移动到的值更改其值。现在我想让进度条根据比例移动到什么值实时改变颜色。这是我为此创建的方法:

def volumelevel():
    s = ttk.Style()
    s.theme_use("classic")
    if scalevar.get() <= 25:
        s.configure("green.Horizontal.TProgressbar", background='green')
        scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get()))
        progress.configure(style="green.Horizontal.TProgressbar")
    elif scalevar.get() <= 75:
        s.configure("yellow.Horizontal.TProgressbar", background='yellow')
        scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get()))
        progress.configure(style="yellow.Horizontal.TProgressbar")
    elif scalevar.get() <= 90:
        s.configure("orange.Horizontal.TProgressbar", background='orange')
        scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get()))
        progress.configure(style="orange.Horizontal.TProgressbar")
    elif scalevar.get() <= 100:
        s.configure("red.Horizontal.TProgressbar", background='red')
        scale.configure(variable=scalevar, command=lambda x: progress.configure(value=scalevar.get()))
        progress.configure(style="red.Horizontal.TProgressbar")

我知道这个方法确实有效,因为我在按钮中调用它来测试它,当我调整比例然后单击按钮时,进度条颜色会改变。

我正在我的比例对象中调用此方法,但是当我移动比例滑块时,无论比例设置为什么值,进度条都保持绿色(如方法中指定的那样)。如何让进度条颜色随刻度实时变化?

更新: 我做了一个 tkinter 条目来实时显示带有比例的值,然后使方法根据值改变条目的前景并且它有效出于某种原因,但没有进度条。

好吧,我开始尝试这个方法,我认为问题是它里面有很多冗余(我还在学习),这导致了一些冲突。我赌了一把,开始一次删除一小部分代码,以查看该方法的行为方式,发现主要问题出在我的秤配置中。删除不需要的代码后,该方法如下所示:

def volumelevel():
    if scalevar.get() <= 25:
        s.configure("Horizontal.TProgressbar", background='green')
        progress.configure(style="Horizontal.TProgressbar", value=scalevar.get())
    elif scalevar.get() <= 75:
        s.configure("Horizontal.TProgressbar", background='yellow')
        progress.configure(style="Horizontal.TProgressbar", value=scalevar.get())
    elif scalevar.get() <= 90:
        s.configure("Horizontal.TProgressbar", background='orange')
        progress.configure(style="Horizontal.TProgressbar", value=scalevar.get())
    elif scalevar.get() <= 100:
        s.configure("Horizontal.TProgressbar", background='red')
        progress.configure(style="Horizontal.TProgressbar", value=scalevar.get())

我有 Style() 声明,主题位于我的代码的根部分(来自我发现的先前示例),所以我将其删除。

我从样式名称中去掉了颜色名称,因为这对方法没有影响。

我完全删除了比例配置,因为在比例对象本身中调用了属性,因此我使用我的比例对象中的命令来调用我创建的方法,而不是设置进度条的值。

并且现在进度条会根据刻度值实时改变颜色。