Как использовать winfo_width () для виджетов? В чем разница между шириной и шириной экрана? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу, чтобы виджет появлялся в центре экрана без использования сетки или пакета.

Вот пример кода:

import tkinter
Win=tkinter.Tk()
Welcome=tkinter.Label(Win,text="Welcome.")
Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_width()//2,y=16)
Win.update()

Когда я запустил код, виджет появился в дальнем левом углу экрана вместо центра. Мне рассказали о reqwidth и update_idletasks, которые исправили код, но мне было интересно, если кто-то мог объяснить, почему код не работает без reqwidth и update_idletasks, так как мне нравится полностью понимать концепции программирования.

1 Ответ

0 голосов
/ 10 мая 2018
import tkinter
Win=tkinter.Tk()
Welcome=tkinter.Label(Win,text="Welcome.")
Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_reqwidth()//2,y=16)
Win.update()
Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_reqwidth()//2,y=16)
print(str(Win.winfo_width()//2)+"-"+str(Welcome.winfo_reqwidth()//2)+"="+str(Win.winfo_width()//2-Welcome.winfo_reqwidth()//2))
Win.bind("<Configure>",func=lambda x:Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_reqwidth()//2,y=16))

и

import tkinter
Win=tkinter.Tk()
Welcome=tkinter.Label(Win,text="Welcome.")
Win.update_idletasks()
Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_width()//2,y=16)
Win.update()
Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_width()//2,y=16)
print(str(Win.winfo_width()//2)+"-"+str(Welcome.winfo_width()//2)+"="+str(Win.winfo_width()//2-Welcome.winfo_width()//2))
Win.bind("<Configure>",func=lambda x:Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_width()//2,y=16))

Кажется, все работает нормально, однако было бы полезно узнать реальную разницу между winfo_width и winfo_reqwidth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...