Как получить размер приложения, если размер зависит от объекта кадра?

#python #tkinter

Вопрос:

Слишком просто, я хочу установить размер окна с помощью метода рамки, а не геометрии. он возвращает 1 значение winfo_width или 200 значение winfo_reqwidth. есть другой метод, который я могу использовать, чтобы получить размер корневого окна?

 import tkinter

root = tkinter.Tk()

tkinter.Frame(root, width=640, height=360, bg="gray").grid()

print(root.winfo_width())

root.mainloop()
 

Комментарии:

1. Воспользуйся root.winfo_reqwidth()

Ответ №1:

в вашем текущем сценарии на момент вызова winfo_width информация о геометрии еще не обновлена,поэтому она возвращает 1. Вы можете принудительно выполнить обновление, позвонив по телефону update_idletasks

окно ширины winfo

Возвращает десятичную строку, указывающую ширину окна в пикселях. При первом создании окна его ширина составит 1 пиксель; в конечном итоге ширина будет изменена менеджером геометрии для удовлетворения потребностей окна. Если вам нужна истинная ширина сразу после создания виджета, вызовите обновление, чтобы заставить диспетчер геометрии упорядочить его, или используйте winfo reqwidth, чтобы получить запрошенную ширину окна вместо его фактической ширины

 import tkinter

root = tkinter.Tk()

tkinter.Frame(root, width=640, height=360, bg="gray").grid()

# before update
print(f'before update: {root.winfo_width()}')

# force update
root.update_idletasks()
print(f'after update: {root.winfo_width()}')

root.mainloop()