#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
Возвращает десятичную строку, указывающую ширину окна в пикселях. При первом создании окна его ширина составит 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()