Кнопки имеют свою собственную систему координат в соответствии с методом grid_location? - PullRequest
5 голосов
/ 23 мая 2011

Я пытаюсь использовать метод grid_location из Grid Geometry Manager в Tkinter, но кажется, что я делаю что-то не так.

Вот мой код:

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 голосов
/ 24 мая 2011

Вы правы, что каждая кнопка "имеет свою собственную систему координат". Точнее, однако, значения event.x и event.y относятся к виджету, связанному с событием, а не к его родителю или корневому окну.

Если вам действительно нужны строка и столбец, в котором находится виджет, вы можете использовать grid_info, чтобы получить строку и столбец виджета, связанные с событием. Например:

def mouse(event):
    grid_info = event.widget.grid_info()
    print("row:", grid_info["row"], "column:", grid_info["column"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...