首页 > 解决方案 > 在展开布局中获取小部件位置

问题描述

我是 tkinter GUI 的新手,我正在尝试获取条目小部件的位置。

我有以下代码

import tkinter as tk 
root = tk.Tk()
root.geometry('1200x900')


frame = tk.Frame(root)
frame.pack(expand=True)


text = tk.Entry (frame,  text = "test")  
text.pack(side=tk.LEFT)

print(text.winfo_x(),text.winfo_y())
root.mainloop()

我正在尝试获取text条目小部件的位置。我使用winfo_x()and winfo_y(),但我得到了0,0.

我想知道在上述情况下如何获取条目相对于根框架的位置?

我已经对此进行了搜索,但没有发现任何类似的问题。我也试过winfo_rootx()and winfo_rooty(),它们也返回相同的结果。

谢谢!

标签: pythontkintertkinter-entry

解决方案


在小部件实际绘制在屏幕上之前,tkinter 不会知道它的真实位置。

一旦它出现在屏幕上,您就可以使用winfo_rootxwinfo_rooty获取相对于窗口左上角的坐标。

要强制绘制窗口,您可以update在计算位置之前调用。

import tkinter as tk
root = tk.Tk()
root.geometry('1200x900')


frame = tk.Frame(root)
frame.pack(expand=True)


text = tk.Entry (frame,  text = "test")
text.pack(side=tk.LEFT)

root.update()

print(text.winfo_rootx(),text.winfo_rooty())
root.mainloop()

推荐阅读