[英]changing colour of ttk.Progressbar elements in the xpnative theme - python
[英]Change ttk.Progressbar colour without using a built in theme
我正在使用與 label 配對的進度條來提供一個進度條,其百分比在給定值時會更新。 我試圖讓進度條在達到某些閾值時改變顏色(現在只是在每個季度)。
我做了一些閱讀,發現我可以使用 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個不同的新Styles。 您可以配置一個,以獲得不同的 colors
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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.