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

如何检测winotify操作按钮点击事件并在点击时调用指定函数

Winotify自定义按钮点击事件实现方案

Winotify 基于Windows原生Toast通知机制封装,要实现按钮点击后的自定义逻辑(比如点击后移除数组对应元素),不需要额外魔改源码,用库本身预留的回调接口就能实现,核心是不要给按钮绑定系统默认处理的内置动作,把按钮参数作为自定义标识透传到回调函数里处理。

实现步骤

  • 给每个操作按钮设置唯一的自定义标识参数,不要把按钮的launch属性填成网页链接、本地应用路径这类会被系统直接拦截处理的内容
  • 注册通知激活回调函数,所有按钮点击、通知本体点击的事件都会触发这个回调,同时把你之前填的launch参数传回来
  • 在回调里解析参数,匹配到对应的数组元素,执行自定义的移除逻辑即可

可直接运行的代码示例

from winotify import Notification

# 示例业务数组
data_list = [
    {"uid": 101, "text": "任务A"},
    {"uid": 102, "text": "任务B"},
    {"uid": 103, "text": "任务C"}
]

def handle_click(args: str):
    # 区分点击事件类型
    if not args.startswith("remove:"):
        return
    # 提取要操作的元素唯一标识
    target_uid = int(args.split(":", 1)[1])
    # 执行数组移除逻辑
    global data_list
    data_list = [i for i in data_list if i["uid"] != target_uid]
    print(f"元素移除完成,当前数组内容:{data_list}")

# 构造通知
toast = Notification(
    app_id="你的业务应用名",
    title="列表操作通知",
    msg="点击下方按钮可移除对应条目"
)
# 遍历数组给每个元素绑定对应操作按钮
for item in data_list:
    toast.add_action(
        label=f"移除{item['text']}",
        launch=f"remove:{item['uid']}"  # 传入自定义标识,不要填链接/程序路径
    )
# 注册点击回调
toast.register_activate_callback(handle_click)
# 弹出通知
toast.show()

注意事项

  • 回调触发的前提是你的主程序处于运行状态,如果通知弹出时程序已经完全退出,Windows会找不到回调入口,自然无法执行自定义逻辑
  • 每个按钮的launch参数必须保证全局唯一,不然无法区分用户点击的是哪个按钮对应的元素
  • 如果之前给通知设置过全局的launch值(点击通知本体触发的动作),注意和按钮的参数做区分,避免回调里逻辑混淆
  • 打包成exe运行时,要保证app_id参数固定,不要每次启动随机生成,否则会出现回调丢失的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:19