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)
每次单击新框架时,都会打印框架名称。祝你有美好的一天!
在下面的程序中,我想获取点击了哪一帧,在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)
每次单击新框架时,都会打印框架名称。祝你有美好的一天!