Python 3.6 - 在Mainloop期间更新Tkinter窗口

时间:2017-07-03 02:32:57

标签: python-3.x user-interface tkinter

我一直在开发一个带有标签的Tkinter应用程序。当变量等于某个东西时,该标签需要设置为某种颜色,而当它等于其他东西时,需要将其他东西设置为某种颜色。但是,我无法看到如何在应用程序的整个生命周期内执行此逻辑。

这是我到目前为止所做的:

if variableName.get() == "":
    label4.config(bg = "SystemButtonFace")
else:
    label4.config(bg = "lawngreen")

提前致谢!

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

我为我的一个小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)