Tkinter 获取框架点击

Tkinter get frame clicked

在下面的程序中,我想获取点击了哪一帧,在3个中。 问题是当我点击时,总是点击最后一帧。

我在 Windows 10 上使用 Python 3.9.2,感谢您的帮助

from tkinter import *

def click_frame(event):
    print(frame.widget)

fenetre=Tk()

for i in range(0,3):
    if i==0:frame=Frame(width=500,height=50,bg="red")
    if i==1:frame=Frame(width=500,height=50,bg="green")
    if i==2:frame=Frame(width=500,height=50,bg="blue")
    frame.pack_propagate(False)
    frame.widget="frame_"+str(i)
    frame.bind("<Button-1>",click_frame)
    frame.pack()

fenetre.mainloop()

问题是您在 click_frame 中使用的 frame 不是函数的参数,因此它是 for 循环之后的 frame,即最后一帧“frame_2".

而不是 frame,您应该使用 event.widget,它对应于触发事件的实际小部件:

def click_frame(event):
    print(event.widget.widget)

除了@j_4321 的答案之外,您还可以使用带有颜色名称的数组来代替 if 语句。所以你的完整代码应该是这样的:

from tkinter import *

def click_frame(event):
    print(event.widget.widget)

fenetre = Tk()

for color in ["red", "green", "blue"]:
    frame = Frame(width=500, height=50, bg=col)
    
    frame.pack_propagate(False)
    frame.widget = "frame_" + i
    frame.bind("<Button-1>", click_frame)
    frame.pack()

fenetre.mainloop()

感谢您的回答。但是在发布之后我找到了解决问题的捷径: 我删除了“for in loop”,并为每一帧分别使用了代码,例如:

apple_frame = Frame(width=500, height=50, bg=col)
apple_frame.widget = "apple_frame" 
apple_frame.bind("<Button-1>", click_frame)

每次单击新框架时,都会打印框架名称。祝你有美好的一天!