根据“ grid_location”方法,按钮有自己的坐标系吗?


问题内容

我正在尝试在Tkinter中使用 Grid Geometry Manager中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)单元格上,它们位于规则的网格中。


问题答案:

您正确地说每个按钮“都有自己的坐标系”。但是,更准确地说,event.xevent.y值相对于与事件关联的窗口小部件,而不是窗口小部件的父窗口或根窗口。

如果确实需要窗口小部件所在的行和列,则可以grid_info用来获取与事件关联的窗口小部件的行和列。例如:

def mouse(event):
    grid_info = event.widget.grid_info()
    print("row:", grid_info["row"], "column:", grid_info["column"])