【问题标题】:Update the color of a progress bar in Python using a scale?使用比例更新 Python 中进度条的颜色?
【发布时间】:2017-10-25 16:35:34
【问题描述】:

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

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 条目以使用比例实时显示值,然后使该方法根据值更改条目的前景,并且由于某种原因它可以工作,但是然而,进度条却没有。

【问题讨论】:

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


    【解决方案1】:

    好的,我开始使用该方法,我认为问题在于它内部有很多冗余(我仍在学习),这导致了一些冲突。我赌了一把,开始一次删除一小段代码,以查看该方法的行为方式,并发现主要问题出在我的规模配置中。删除不需要的代码后,方法如下所示:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 2014-03-27
      • 2023-03-03
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2015-09-19
      相关资源
      最近更新 更多