【问题标题】:Python 3.6 - Updating Tkinter Window During MainloopPython 3.6 - 在主循环期间更新 Tkinter 窗口
【发布时间】:2018-04-22 16:43:11
【问题描述】:
我一直在开发一个带有标签的 Tkinter 应用程序。当一个变量等于某个东西时,这个标签需要设置为某种颜色,当它等于其他东西时,这个标签需要设置为某种颜色。但是,我看不到如何在应用程序的整个生命周期中执行此逻辑。
这是我目前所拥有的:
if variableName.get() == "":
label4.config(bg = "SystemButtonFace")
else:
label4.config(bg = "lawngreen")
提前致谢!
【问题讨论】:
标签:
python-3.x
user-interface
tkinter
【解决方案1】:
您可以使用 tkinter 变量的 trace 方法来设置函数,以便在变量更改时运行。
def update_bg(*args):
if variableName.get() == "":
label4.config(bg = "SystemButtonFace")
else:
label4.config(bg = "lawngreen")
variableName.trace('w', update_bg)
我不了解您的应用程序,但这似乎是制作您自己的 Label 小部件的理想场所。这是一个例子:
import tkinter as tk
class DuffettLabel(tk.Label):
'''A special type of label that changes the background color when empty'''
def __init__(self, master=None, **kwargs):
tk.Label.__init__(self, master, **kwargs)
self.variable = kwargs.get('textvariable')
if self.variable is not None:
self.variable.trace('w', self.update_bg)
self.update_bg()
def update_bg(self, *args):
if self.variable.get() == "":
self.config(bg = "red")
else:
self.config(bg = "lawngreen")
root = tk.Tk()
root.geometry('200x200')
variableName = tk.StringVar()
ent = tk.Entry(root, textvariable=variableName)
ent.pack()
lbl = DuffettLabel(root, textvariable=variableName)
lbl.pack(fill=tk.X)
root.mainloop()
【解决方案2】:
我为我的一个小型 python 3.6.4 应用程序构建了这个小功能。希望对您有所帮助。
决定百分比是正数还是负数并相应着色的函数。
def range_coin(self,no,pos,coin,vol):
if eval(str(no)) < 0:
temp = 'self.' + str(coin)+'l'+str(pos)+'0'+str(vol)+'_la' + '.configure(background = "red")'
exec(temp)
else:
temp = 'self.' + str(coin)+'l'+str(pos)+'0'+str(vol)+'_la' + '.configure(background = "green")'
exec(temp)
temp = "self." + str(coin)+"l"+str(pos)+"0"+str(vol)+"_la['text'] =" + str(no)
exec(temp)