4

私の目的は、マウスがラベルの上に移動したときにラベル ウィジェットのテキストを変更することです。1 つのラベルについては、次のようにします。

import Tkinter as tk

def fun1(event):
    label.config(text="Haha")
def fun2(event):
    label.config(text="Label1")

root=tk.Tk()
label=tk.Label(root,text="Label1")
label.grid(row=1,column=1)
label.bind("<Enter>", fun1)
label.bind("<Leave>", fun2)
root.mainloop()

しかし今、私は for ループによって生成された一連のラベルと、変更したいテキストを含むリストを持っています。

mylist=['a','b','c','d','e']
for i in range(5):
    tk.Label(root,text="Label"+str(i)).grid(row=i+1,column=1)

これにより、番号付きの 5 つのラベルが生成されます。個々のラベルごとにマウス オーバー イベントを追加して、ラベル 1 にマウスを合わせると「a」に変わり、ラベル 2 にマウスを合わせると「b」に変わるなどのことはできますか? 参考までに、mylist 内のアイテムの数は、for ループで使用される数と常に同じになります。

4

2 に答える 2

2
import Tkinter as tk

root = tk.Tk()
mylist = ['a','b','c','d','e']

for i, x in enumerate(mylist):
    label = tk.Label(root, text="Label "+str(i))
    label.grid(row=i+1, column=1)
    label.bind("<Enter>", lambda e, x=x: e.widget.config(text=x))
    label.bind("<Leave>", lambda e, i=i: e.widget.config(text="Label "+str(i)))

root.mainloop()
于 2013-05-21T08:41:06.957 に答える
1

イベント関数はクラスに含めることができ、表示する文字列はコンストラクターで定義できます。

import Tkinter as tk

class Labels(object):
    def __init__(self,number,basicStr,onMouseStr):
        self.i = number
        self.basicStr = basicStr + str(number)
        self.onMouseStr = onMouseStr
        mylist=['a','b','c','d','e']
        self.label = tk.Label(root,text="Label"+str(i))
        self.label.grid(row=1+i,column=1)
        self.label.bind("<Enter>", self.fun1)
        self.label.bind("<Leave>", self.fun2)
    def fun1(self,event):
        self.label.config(text=self.basicStr)
    def fun2(self,event):
        self.label.config(text=self.onMouseStr)
root=tk.Tk()
labelsList = []
for i in range(5):
    lab = Labels(i,"haha","label"+str(i))
    labelsList.append(lab)
root.mainloop()
于 2013-05-21T08:59:47.013 に答える