按钮根据“grid_location”方法有自己的坐标系统吗?
我正在尝试使用 Tkinter 中的 grid_location
方法,这个方法是来自 网格几何管理器,但是我好像做错了什么。
这是我的代码:
from tkinter import *
root = Tk()
b=Button(root, text="00")
b.grid(row=0, column=0)
b2=Button(root, text="11")
b2.grid(row=1, column=1)
b3=Button(root, text="22")
b3.grid(row=2, column=2)
b4=Button(root, text="33")
b4.grid(row=3, column=3)
b5=Button(root, text="44")
b5.grid(row=4, column=4)
def mouse(event):
print(event.x, event.y)
print(root.grid_location(event.x, event.y))
root.bind("<Button-1>", mouse)
root.mainloop()
当我点击按钮外面的地方时,它是可以正常工作的,但当我点击任何按钮内部时,似乎每个按钮都有自己的坐标系统。所以,尽管在代码中它们是在一个正常的网格上,但每个按钮都在 (0, 0) 这个位置。
1 个回答
7
你说得对,每个按钮“都有自己的坐标系统”。不过更准确地说,event.x
和 event.y
的值是相对于触发事件的那个小部件(widget)来说的,而不是相对于它的父级或根窗口。
如果你真的需要知道这个小部件所在的行和列,可以使用 grid_info
来获取与事件相关的小部件的行和列。例如:
def mouse(event):
grid_info = event.widget.grid_info()
print("row:", grid_info["row"], "column:", grid_info["column"])