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

如何实现tkinter窗口仅在被拖动到顶部时自动复位到指定位置

问题原因

你绑定的<Configure>事件会在窗口位置、大小发生任何变化时都触发,当前move函数没有做任何条件判断,只要事件触发就直接重置窗口位置,自然会出现只要移动窗口就复位的问题。

解决方案

在事件回调函数中先判断窗口当前的顶部坐标是否触及屏幕顶部,只有符合条件时才执行复位逻辑。修改后代码如下:

from tkinter import *

# 存储初始窗口参数,后续修改直接调整常量即可
INIT_WIDTH = 1270
INIT_HEIGHT = 725
INIT_POS_X = 0
INIT_POS_Y = 0

def move(e):
    # 仅响应主窗口的尺寸/位置变化事件,排除子控件触发的事件和异常尺寸变化
    if e.widget == root and e.width == INIT_WIDTH and e.height == INIT_HEIGHT:
        # 获取窗口当前顶部y坐标,判断是否触及屏幕顶部
        current_y = root.winfo_y()
        if current_y <= 0:
            root.geometry(f"{INIT_WIDTH}x{INIT_HEIGHT}+{INIT_POS_X}+{INIT_POS_Y}")

root = Tk()
root.geometry(f"{INIT_WIDTH}x{INIT_HEIGHT}+{INIT_POS_X}+{INIT_POS_Y}")
root.resizable(False, False)
button = Button(root, command=move)
button.place(x=10, y=10)
entry = Entry(root)
entry.place(relx=.4, rely=.5)
root.bind('<Configure>', move)

root.mainloop()

补充说明

  • 原代码中变量名Entry和tkinter输入框类名重名,容易引发后续调用错误,修改为小写开头的entry更符合命名规范
  • 触发阈值可自行调整,比如希望窗口离顶部还有10像素就触发复位,可把判断条件改为current_y <= 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:27:03