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

Windows10下Python实现Tkinter全屏Canvas图片自动置顶

解决Tkinter全屏图片窗口持续置顶问题

你的核心问题是Tkinter的mainloop()会阻塞后续代码执行,所以没法在循环里调用lift()维持窗口置顶。解决这个问题得用Tkinter内置的after()方法,在事件循环里定期执行置顶操作,不用跳出循环。

修改后的完整代码如下:

import pyautogui as pa
import datetime
import tkinter
from PIL import Image, ImageTk

def keep_topmost(window):
    # 持续将窗口置顶
    window.lift()
    # 每隔1000毫秒(1秒)重复调用自身
    window.after(1000, keep_topmost, window)

def showPIL(pilImage):
    popup = tkinter.Tk()
    w, h = popup.winfo_screenwidth(), popup.winfo_screenheight()
    popup.attributes('-fullscreen', True) 
    popup.geometry("%dx%d+0+0" % (w, h))
    # 设置初始置顶属性
    popup.attributes('-topmost', True)
    popup.focus_set()

    # 支持按Esc退出,修正退出逻辑
    popup.bind("<Escape>", lambda e: popup.destroy())
    canvas = tkinter.Canvas(popup, width=w, height=h, highlightthickness=0)
    canvas.pack()
    canvas.configure(background='black')

    imgWidth, imgHeight = pilImage.size
    if imgWidth != w or imgHeight != h:
        ratio = min(w/imgWidth, h/imgHeight)
        imgWidth = int(imgWidth*ratio)
        imgHeight = int(imgHeight*ratio)
        pilImage = pilImage.resize((imgWidth, imgHeight))

    image = ImageTk.PhotoImage(pilImage)
    canvas.create_image(w/2, h/2, image=image)
    # 启动持续置顶任务
    keep_topmost(popup)
    popup.mainloop()


if __name__ == '__main__':
    # 鼠标移至角落不终止程序
    pa.FAILSAFE = False

    pilImage = Image.open(r"C:\directory\to\your\image.png")

    pa.moveTo(pa.size().width, 1000)  # 将鼠标移至屏幕侧边
    
    # five_pm = datetime.time(hour=17, minute=0)
    # while datetime.datetime.now().time() < five_pm:
    showPIL(pilImage)

关键修改点说明:

  • 新增keep_topmost函数:负责调用window.lift()将窗口置顶,然后用after()安排1秒后再次调用自己,形成循环
  • 初始设置popup.attributes('-topmost', True):让窗口一开始就处于置顶状态
  • 修正Esc退出逻辑:把原来的exit()换成destroy(),确保窗口正常关闭
  • 把置顶逻辑嵌入Tkinter事件循环:不用额外开线程或阻塞循环,完全适配Tkinter的运行机制

这样就能保证窗口每隔1秒自动置顶一次,不会被系统弹窗、更新提示等遮挡,适合无人值守的大厅展示场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:26:02