如何实现点击Tkinter窗口外部区域时窗口仍保持置顶聚焦?
实现方案
Tkinter本身没有提供点击外部后锁定窗口层级的专用接口,但通过内置窗口属性加轻量轮询就能实现需求,全平台通用。
核心逻辑
- 给窗口设置
-topmost属性,让窗口管理器将其标记为最高层级窗口,初始状态下就会置于所有普通窗口之上 - 部分桌面环境下点击其他程序窗口会临时顶掉
-topmost的层级,加一个间隔极短的定时任务重复设置置顶属性即可,资源占用可以忽略不计
可直接运行的代码
from tkinter import * window = Tk() # 窗口尺寸+居中定位 win_w, win_h = 500, 500 screen_w = window.winfo_screenwidth() screen_h = window.winfo_screenheight() place_x = int((screen_w - win_w) / 2) place_y = int((screen_h - win_h) / 2) window.geometry(f"{win_w}x{win_h}+{place_x}+{place_y}") def always_on_top(): window.attributes("-topmost", True) # 每100毫秒重设一次置顶,人眼完全感知不到延迟 window.after(100, always_on_top) # 初始化置顶状态 window.attributes("-topmost", True) always_on_top() window.mainloop()
使用说明
- 这个方案不会强制锁定输入焦点,点击窗口外部区域时,其他程序可以正常获得焦点响应操作,只是Tkinter窗口会始终浮在最上层不会被盖住
- 如果后续需要取消置顶,调用
window.attributes("-topmost", False)即可 - 定时间隔不建议低于50毫秒,100毫秒的间隔足够稳定,也不会产生多余性能消耗
内容的提问来源于stack exchange,提问作者Forty966699669
相关产品推荐
相关产品推荐

