2017-07-03 16 views
0

私はそこにラベルを持つTkinterアプリケーションを開発しています。このラベルは、変数が何かに等しいときに特定の色に設定する必要があります。しかし、このロジックをアプリケーションの全ライフサイクルにわたって実行させる方法はわかりません。ここでPython 3.6 - Mainloop中にTkinterウィンドウを更新しています

は、私がこれまで持っているものです:事前に

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

ありがとう!

答えて

1

tkinter変数のtraceメソッドを使用すると、変数が変更されたときに実行される関数を設定できます。

def update_bg(*args): 
    if variableName.get() == "": 
     label4.config(bg = "SystemButtonFace") 
    else: 
     label4.config(bg = "lawngreen") 

variableName.trace('w', update_bg) 

あなたのアプリケーションはわかりませんが、これは自分のラベルウィジェットを作成するのに理想的な場所のようです。ここに例があります:

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() 
+0

ありがとうございます、あなたの答えはヒープを助けました! –

関連する問題