Рассмотрим следующий код:winfo_container() всегда возвращает None?
import Tkinter as tk # Python 2.7
screen = tk.Tk()
entry = tk.Entry(screen)
entry.place(x=0, y=0, width=100, height=20)
print(screen.winfo_containing(5, 5))
screen.mainloop()
Учитывая информацию в разделе «winfo_containing» в http://effbot.org/tkinterbook/widget.htm, я бы ожидать, чтобы напечатать личность entry
. Например. что-то вроде "". Вместо этого я всегда получаю None
. Почему это? Запись - это ребенок до screen
, а координата (5, 5) попадает в место, указанное в моем обращении к place
.
В качестве альтернативы, существует ли другой способ получения (самого верхнего) виджета в определенном месте?
'' winfo_containing '' использует координаты относительно экрана - ваш фактический, физический экран, а не окно, которое вы случайно вызывали «экран». Маловероятно, что глобальная координата 5,5 попадает в исходное местоположение вашего окна. Вам также может потребоваться вызвать '' update_idletasks() '' (или фактически ввести mainloop), прежде чем все данные геометрии будут действительны. – jasonharper