tkinter: прогрессбар с разными цветами - PullRequest
1 голос
/ 11 марта 2020

Я использую в этой программе Progressbar в связи с масштабом. Я хочу, чтобы с 0 до 25 индикатор выполнения был зеленым, с 25 до 50 желтым, от 50 до 75 оранжевым и от 75 до 100 красным, но я искал, что разные разделы имеют свой собственный цвет, и не все изменения в прогрессбар его цвет, как в этой программе (например, в конце, если масштаб на 65, например, индикатор выполнения будет иметь зеленую секцию, желтую секцию и оранжевую секцию). Я понятия не имею, как это сделать, и не нашел абсолютно ничего.

Спасибо, если вы можете мне помочь !!!!!!

Вот программа, которую я имею:

from tkinter import *
from tkinter import ttk

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

root=Tk()

s=ttk.Style(root)
s.theme_use("clam")

progress=ttk.Progressbar(root,maximum="100",style="Horizontal.TProgressbar")
progress.pack()

scalevar=IntVar()
scale=Scale(root,from_=0,to=100,orient="horizontal",variable=scalevar,command=volumelevel)
scale.pack()

root.mainloop()

1 Ответ

1 голос
/ 11 марта 2020

Может быть progressbar не может сделать это, но tkinter.canvas может сделать это легко.

Это изображение:

enter image description here

и

enter image description here

Это то, что вы хотите?

from tkinter import *
from tkinter import ttk

def volumelevel(scalevar):
    scalevar=int(scalevar)
    canvas.delete(ALL)
    if scalevar <= 25:
        canvas.create_rectangle(0,5,scalevar,15,fill="green")
    elif scalevar <= 50 and scalevar > 25:
        canvas.create_rectangle(0, 5, 25, 15, fill="green")
        canvas.create_rectangle(25, 5, scalevar,15 ,fill="yellow")
    elif scalevar <= 75 and scalevar > 50:
        canvas.create_rectangle(0, 5, 25, 15, fill="green")
        canvas.create_rectangle(25, 5, 50, 15, fill="yellow")
        canvas.create_rectangle(50, 5, scalevar, 15, fill="orange")
    else:
        canvas.create_rectangle(0, 5, 25, 15, fill="green")
        canvas.create_rectangle(25, 5, 50, 15, fill="yellow")
        canvas.create_rectangle(50, 5, 75, 15, fill="orange")
        canvas.create_rectangle(75, 5, scalevar, 15, fill="red")

root=Tk()

s=ttk.Style(root)
s.theme_use("clam")

canvas = Canvas(root,bd=1,relief="solid",width=98,height=15) # I find when width=98 can make canvas filled when scale = 100;
canvas.pack()

scalevar=IntVar()
scale=Scale(root,from_=0,to=100,orient="horizontal",variable=scalevar,command=volumelevel)
scale.pack()

root.mainloop()
...