で
おかげで、それが聞こえます。これは仮想イベントで行うことができます。
ここでは、コンポーネントの色が変わったときにラベルを更新する例を示します。毎秒コンポーネントはランダムな色を選択します。それが現在の色と異なる場合、それは変更され、メインプログラムがリッスンしているイベントを送信します。イベントが検出されると、ラベルが更新されます。
import tkinter as tk
import random
COLORS = ("red", "green", "yellow")
class Component(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.value = self.cget("background")
self.after(1000, self.maybe_change)
def maybe_change(self):
new_color = random.choice(COLORS)
if self.value != new_color:
self.value = new_color
self.configure(background=new_color)
self.event_generate("<<ComponentChanged>>")
self.after(1000, self.maybe_change)
class App(object):
def __init__(self):
self.root = tk.Tk()
self.component = Component(self.root, width=300, height=50)
self.label = tk.Label(self.root, text="")
self.component.pack(side="top", fill="both", expand=True)
self.label.pack(side="bottom", fill="x")
self.component.bind("<<ComponentChanged>>",
self.handle_component_change)
def handle_component_change(self, event):
self.label.configure(text="component value is now '%s'" % self.component.value)
def start(self):
self.root.mainloop()
app = App()
app.start()
変数である必要がありますか?ビジュアルコンポーネントが変更されるたびにバインドできるイベントが発生することも同様に機能しますか?ビジュアルコンポーネントが変更され、内部値が変更されると、何が表示されますか?この変数を作成して値を変更すると、その変数はどのように使用されますか?言い換えれば、 "はい、それは可能です"。それを行う方法は、あなたが実際にやろうとしていることによって決まります。 –
私はあなたの視点を理解することができます。ビジュアルコンポーネントを作成するときは、StringVarの場合と同様に、カスタム変数をバインドします。そして、私はこの変数を必要に応じて使用するか、または渡す必要があります。 – madtyn
バインディングを使用しているので、特別な変数を使用する必要がありますか?バインドされた関数はコンポーネントから直接値を取得できませんか?言い換えれば、 'MyVariable.get'の代わりに' MyComponent.get'を使用することができます。より単純な解決策があるように見える場合、なぜこれを特別な変数にしなければならないのですか? –