Python 如何将winfo_width()用于小部件?宽度和宽度的区别是什么?
我想让一个小部件出现在屏幕中央,而不使用网格或包 下面是一些示例代码:Python 如何将winfo_width()用于小部件?宽度和宽度的区别是什么?,python,tkinter,Python,Tkinter,我想让一个小部件出现在屏幕中央,而不使用网格或包 下面是一些示例代码: 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\u idlet
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\u idletasks
,它们修复了代码,但我想知道是否有人能解释为什么没有reqwidth
和update\u idletasks
,代码就不能工作,因为我喜欢完全理解编程概念。import tkinter
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))
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)
打印(str(Win.winfo_-width()//2)+“-”+str(Welcome.winfo_-reqwidth()//2)+“=”+str(Win.winfo_-width()//2-Welcome.winfo_-reqwidth()//2))
Win.bind(“,func=lambda x:Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_reqwidth()//2,y=16))
及
导入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)
打印(str(Win.winfo_width()//2)+“-”+str(Welcome.winfo_width()//2)+“=”+str(Win.winfo_width()//2-Welcome.winfo_width()//2))
Win.bind(“,func=lambda x:Welcome.place(x=Win.winfo_width()//2-Welcome.winfo_width()//2,y=16))
看起来效果不错,但是了解
winfo_-width
和winfo_-reqwidth
之间的实际差异会很有帮助。请看:您是否尝试过winfo_-reqheight()和winfo_-reqwidth()?@progmatico,但它们与winfo_-height()
和winfo-width()有什么不同?
假设您配置了一个窗口大小。如果窗口尚未显示在屏幕上,或者tkinter尚未完成其所有UI更新任务,并且您要求提供窗口大小,则它可能不会反映您配置的大小,因为窗口或小部件尚未达到其请求的大小。req方法将为您提供小部件大小的请求值,无论此时的实际大小如何。
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))