Получить позицию виджета в развернутом макете - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в 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() и winfo_y(), но получаю позицию 0,0.

Мне интересно, как я могу получить позицию входа относительно кадра root в приведенном выше случае?

Я искал по этому вопросу, но не нашел подобного вопроса. Я также попробовал winfo_rootx() и winfo_rooty(), которые также возвращают тот же результат.

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Пока виджет не будет отображен на экране, tkinter не будет знать его истинное положение.

Как только он появится на экране, вы можете использовать winfo_rootx и winfo_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()
0 голосов
/ 12 апреля 2020

Может быть, это может помочь вам. Получите результаты в формате: ширина × высота + xpos + ypos

import tkinter as tk 
root = tk.Tk()
root.geometry('500x700+145+100')
frame = tk.Frame(root)
frame.place(x=50, y=50)
text = tk.Entry (root,  text = "test")  
text.place(x=10, y=43)
root.update_idletasks()
tst=text.winfo_geometry()
lab= tk.Label(root, text=tst)
lab.place(x=30, y=100)
root.mainloop()

. Попробуйте настроить его так, как вам нужно.

...