Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将winfo_width()用于小部件?宽度和宽度的区别是什么?_Python_Tkinter - Fatal编程技术网

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))