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

如何让Tkinter新窗口在任务栏闪烁橙色直至被点击?

Tkinter实现任务栏闪烁提醒

Tkinter本身没有原生支持任务栏窗口闪烁的功能,这属于系统级交互,需要调用对应系统的API来实现。下面以Windows系统为例,通过ctypes调用系统API实现窗口在任务栏闪烁橙色提醒,直到用户点击窗口为止:

完整代码实现

import tkinter as tk
import ctypes
from ctypes import wintypes

# 定义Windows API相关结构体和函数
class FLASHWINFO(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.UINT),
        ("hwnd", wintypes.HWND),
        ("dwFlags", wintypes.DWORD),
        ("uCount", wintypes.UINT),
        ("dwTimeout", wintypes.DWORD)
    ]

FLASHW_ALL = 0x00000003  # 闪烁窗口标题和任务栏按钮
FLASHW_TIMERNOFG = 0x0000000C  # 持续闪烁直到窗口获得焦点

user32 = ctypes.WinDLL("user32")
FlashWindowEx = user32.FlashWindowEx
FlashWindowEx.argtypes = [ctypes.POINTER(FLASHWINFO)]
FlashWindowEx.restype = wintypes.BOOL

def flash_window(window):
    # 获取窗口句柄
    hwnd = wintypes.HWND(window.winfo_id())
    flash_info = FLASHWINFO()
    flash_info.cbSize = ctypes.sizeof(FLASHWINFO)
    flash_info.hwnd = hwnd
    flash_info.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG
    flash_info.uCount = 0  # 无限闪烁
    flash_info.dwTimeout = 0  # 系统默认间隔
    FlashWindowEx(ctypes.byref(flash_info))

def stop_flash(window):
    hwnd = wintypes.HWND(window.winfo_id())
    flash_info = FLASHWINFO()
    flash_info.cbSize = ctypes.sizeof(FLASHWINFO)
    flash_info.hwnd = hwnd
    flash_info.dwFlags = 0  # 停止闪烁
    flash_info.uCount = 0
    flash_info.dwTimeout = 0
    FlashWindowEx(ctypes.byref(flash_info))

# 创建主窗口
end = tk.Tk()
end.title('FreteFinder')
end.geometry("450x250")
end.eval('tk::PlaceWindow . center')

# 修正原代码笔误:将win.focus_force()改为end.focus_force()
end.after(1000, lambda: end.focus_force())

# 绑定焦点事件:失去焦点时开始闪烁,获得焦点时停止闪烁
end.bind("<FocusOut>", lambda e: flash_window(end))
end.bind("<FocusIn>", lambda e: stop_flash(end))

# 添加提示标签
label = tk.Label(end, text="Novo Frete Encontrado!", font=("Arial", 20))
label.place(anchor=tk.CENTER, relx=0.5, rely=0.5)

end.mainloop()

代码说明

  • 通过ctypes调用Windows系统的user32.dll中FlashWindowEx函数,这是系统原生的窗口闪烁接口。
  • FLASHW_TIMERNOFG参数控制窗口持续闪烁,直到用户点击窗口获取焦点后自动停止。
  • 绑定<FocusOut>和<FocusIn>事件,实现窗口焦点变化时的闪烁启停逻辑。
  • 修正了原代码中win.focus_force()的笔误,确保窗口创建后能正常自动获取焦点。

其他系统适配提示

  • macOS:可借助pyobjc库调用AppKit框架的NSWindow相关方法实现任务栏闪烁。
  • Linux:不同桌面环境实现方式不同,可尝试调用GTK相关API或使用xdotool工具触发闪烁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:37:13