我有一个简单的tkinter窗口。它由一个小窗口,一个计时器和一个设置计时器的按钮组成。我不想详细介绍代码。
我想更改窗口中所有小部件的背景(按钮,标签等)。
我的第一个想法是使用我将设置为"red"
的全局变量,并将所有小部件background
选项与全局变量相关联。然后,按下按钮我将全局变量更改为"green"
(以便所有小部件的背景发生变化)但没有任何反应。
我的理解是.mainloop()
种更新了窗口。当变量没有重新启动我的应用程序时,如何让小工具更改背景颜色?
答案 0 :(得分:6)
从我的第一印象中我认为这应该是你正在寻找的,作为一个简单的例子
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()
我确信你可以解决任何问题,但尚未经过测试
答案 1 :(得分:1)
背景颜色不会自动更改。 Tkinter能够用字体做这样的事情而不用颜色。
您必须编写一些代码来迭代所有小部件并更改其背景颜色。
答案 2 :(得分:1)
(我将这个答案发布到一个类似的问题上,我认为这也适用于这种情况:)
在我生命中,仅使用configure方法就无法使其正常工作。
最终可行的方法是将所需的颜色(在我的情况下为按钮)设置为StringVar()
(直接设置为get()
),然后也使用按钮上的配置。
我为我最需要的用例写了一个非常普通的示例(很多按钮,需要引用它们(在Python 2和3中进行了测试):
Python 3:
import tkinter as tk
Python 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()