在屏幕居中
# 窗体显示在屏幕中央
def set_in_screen_center(tk_widget,winWidth=None,winHeight=None):
"""
:param tk_widget: 部件,如果传入的是根窗口,必须指定长宽,要不只显示标题栏
:param winWidth: 指定显示宽度
:param winHeight: 指定显示长度
:return:
"""
# 获取根窗口
root = tk_widget
temp_root = None
while 1:
temp_root = root.master
if temp_root is None:
break
root = temp_root
# 获取屏幕分辨率
screenWidth = root.winfo_screenwidth()
screenHeight = root.winfo_screenheight()
root.update()
if winWidth is None:winWidth=tk_widget.winfo_width()
if winHeight is None:winHeight=tk_widget.winfo_height()
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)
# 设置窗口初始位置在屏幕居中
tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
在父窗口居中
# 显示在窗口中间
def set_in_windows_center(tk_widget,winWidth=None,winHeight=None):
"""
:param tk_widget: 部件,不能传入根窗口
:param winWidth: 指定显示宽度
:param winHeight: 指定显示长度
:return:
"""
# 获取根窗口
root = tk_widget
temp_root = None
while 1:
temp_root = root.master
if temp_root is None:
break
root = temp_root
root.update()
# 获取根窗口大小
r_width = root.winfo_width()
r_height = root.winfo_height()
# 获取根窗口x,y
r_x = root.winfo_rootx()
r_y = root.winfo_rooty()
if winWidth is None: winWidth = tk_widget.winfo_width()
if winHeight is None: winHeight = tk_widget.winfo_height()
print(f"根x:{r_x},根y:{r_y},根宽:{r_width},根长;{r_height}")
if r_width > winWidth:
x = int((r_x + (r_width - winWidth) / 2))
else:
x = r_x
if r_height > winHeight:
y = int((r_y + (r_height - winHeight) / 2))
else:
y = r_y
# 设置窗口初始位置在指定窗口中间
tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
# tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, 400, 400))
print(f"窗x:{x},窗y:{y},窗宽:{winWidth},窗长:{winHeight}")