【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-03
      • 2017-05-09
      • 1970-01-01
      • 2022-11-20
      • 2021-07-16
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多