[英]Dynamically change widget background color in Tkinter
我有一個簡單的 tkinter 窗口。 它由一個小窗口、一個計時器和一個設置計時器的按鈕組成。 我不想詳細介紹代碼。
我想更改窗口中所有小部件的背景(按鈕、標簽等)。
我的第一個想法是使用一個全局變量,例如,我將其設置為"red"
,並將所有小部件background
選項與全局變量相關聯。 然后,在按下按鈕時,我將全局變量更改為"green"
(以便所有小部件的背景發生變化)但沒有任何反應。
我的理解是.mainloop()
更新了窗口。 當我的變量發生變化而不重新啟動我的應用程序時,如何讓小部件更改背景顏色?
從我的第一印象我認為這應該是你要找的,作為一個簡單的例子
from Tkinter import *
root = Tk()
global colour
global colourselection
global count
colour = ""
colourselection= ['red', 'blue']
count = 1
def start(parent):
Tk.after(parent, 1000, change)
def change():
global colour
global colourselection
global count
if (count < 2 ):
colour = colourselection[count]
button.configure(bg = colour)
count + 1
else:
colour = colourselection[count]
button.configure(bg = colour)
count = 1
start(root)
button = Button(text = 'start', command = lambda: start(root))
button.pack()
root.mainloop()
我相信你可以解決任何問題,它沒有經過測試
背景顏色不會自動改變。 Tkinter 有能力用字體做這樣的事情,但不能用顏色。
您將不得不編寫一些代碼來遍歷所有小部件並更改它們的背景顏色。
(我將此答案發布到了一個類似的問題,我認為這也適用於這種情況:)
在我的一生中,我無法僅使用 configure 方法讓它工作。 最終起作用的是將所需的顏色(在我的情況下,按鈕的顏色)設置為StringVar()
(直接設置為get()
),然后也使用按鈕上的配置。
我為我最需要的用例編寫了一個非常通用的示例(有很多按鈕,我需要在其中引用它們(在 Python 2 和 3 中測試):
蟒蛇3:
import tkinter as tk
蟒蛇2:
import Tkinter as tk
代碼
root = tk.Tk()
parent = tk.Frame(root)
buttonNames = ['numberOne','numberTwo','happyButton']
buttonDic = {}
buttonColors = {}
def change_color(name):
buttonColors[name].set("red")
buttonDic[name].config(background=buttonColors[name].get())
for name in buttonNames:
buttonColors[name] = tk.StringVar()
buttonColors[name].set("blue")
buttonDic[name] = tk.Button(
parent,
text = name,
width = 20,
background = buttonColors[name].get(),
command= lambda passName=name: change_color(passName)
)
parent.grid(row=0,column=0)
for i,name in enumerate(buttonNames):
buttonDic[name].grid(row=i,column=0)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.