为什么 tkinter 中 widget.winfo_rootx() 和 widget.winfo_rootx() 总是 0?

Mil*_*Tom 2 python tkinter python-3.x

这是我的代码:

from tkinter import *

root = Tk()
a = Button(text=str(1))
a.place(x=100, y=100)
widget_x, widget_y = a.winfo_rootx(), a.winfo_rooty()
print(widget_x, widget_y)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

输出始终是0 0. 这是为什么?我该如何解决它?

Bry*_*ley 6

该值为零,因为您在窗口可见之前获取了坐标。您可以通过以下两种方法之一解决此问题:直到主循环启动后才获取坐标(使用after_idle),或者通过调用 强制将窗口绘制到屏幕上update

例子:

from tkinter import *

root = Tk()
a = Button(text=str(1))
a.place(x=100, y=100)

root.update()
widget_x, widget_y = a.winfo_rootx(), a.winfo_rooty()
print(widget_x, widget_y)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)