You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Tkinter主窗口、弹出窗口及标签分别居中显示?

Tkinter窗口居中解决方案

问题分析

你当前的弹出窗口无法在主窗口居中,核心原因是计算Toplevel位置时用了主窗口内部的相对偏移,但geometry方法里的+X+Y是屏幕绝对坐标,并非相对于主窗口的坐标。需要结合主窗口的屏幕位置来计算弹出窗口的绝对坐标。

修正后的代码

from tkinter import *

# 主窗口居中屏幕
window = Tk()
window_width = 500
window_height = 500

screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
# 计算主窗口的屏幕坐标
win_x = int((screen_width - window_width) / 2)
win_y = int((screen_height - window_height) / 2)
window.geometry(f"{window_width}x{window_height}+{win_x}+{win_y}")

def pop():
    top = Toplevel(window)
    top_width = 200
    top_height = 200
    
    # 获取主窗口当前的屏幕坐标(应对窗口被拖动后的位置变化)
    current_win_x = window.winfo_x()
    current_win_y = window.winfo_y()
    
    # 计算弹出窗口相对于主窗口居中的绝对坐标
    top_x = current_win_x + int((window_width - top_width) / 2)
    top_y = current_win_y + int((window_height - top_height) / 2)
    
    top.geometry(f"{top_width}x{top_height}+{top_x}+{top_y}")
    top.title("Hi")
    
    # 标签居中弹出窗口(两种写法都可行)
    popLabel = Label(top, text="Ok")
    popLabel.place(relx=0.5, rely=0.5, anchor='center')
    # 也可以用pack简化:popLabel.pack(expand=True, fill=BOTH)

# 添加触发弹出窗口的按钮
Button(window, text="弹出窗口", command=pop).pack(pady=20)

window.mainloop()

关键修正点

  • 弹出窗口位置:用window.winfo_x()和window.winfo_y()实时获取主窗口的屏幕绝对坐标,再加上主窗口内的居中偏移量,确保弹出窗口始终在主窗口正中央。
  • 主窗口代码简化:合并geometry设置,避免重复调用。
  • 标签居中:你原有的place写法完全有效,也可以用pack(expand=True, fill=BOTH)实现自动居中,更适配Tkinter的布局逻辑。

内容的提问来源于stack exchange,提问作者contactme8359

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:06:32