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

时间:2017-05-25 06:13:12

标签: python-3.x tkinter progress-bar

我有一个进度条,根据我将比例移动到的值更改其值。现在我想让进度条实时更改颜色,具体取决于缩放比例的值。这是我创建的方法:

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

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

我在缩放对象中调用此方法,但是当我移动缩放滑块时,无论缩放设置的值如何,进度条都保持绿色(如方法中所指定)。如何使用比例实时更改进度条颜色?

UPDATE:我创建了一个tkinter条目,用比例实时显示值,然后根据值改变条目的前景,并且由于某种原因它可以工作,但是但是进度条没有。

1 个答案:

答案 0 :(得分:4)

好的,我开始玩这个方法,我认为问题在于它内部有很多冗余(我还在学习),这引起了一些冲突。我赌博并开始一次删除一小段代码,看看该方法的表现如何,并发现主要问题在于我的比例配置。删除不需要的代码后,该方法如下所示:

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()声明,以及我的代码的根部分中的主题(来自我之前发现的示例)所以我把它拿出来了。

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

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

现在,进度条会根据比例值实时更改颜色。