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

Windows10/Python3环境下如何让beep.pyw蜂鸣时自动打开Tkinter组件widget.py

功能实现方案

两种实现方式都可以满足需求,更推荐直接调用不合并的方案,职责分离更便于后续维护。

优先方案:beep.pyw 直接调用 widget.py(无需合并)

方案优势

两个文件功能独立,后续修改蜂鸣间隔、提示音参数只需要改beep.pyw,调整休息建议、GUI样式只需要改widget.py,维护成本更低。

修改后的 beep.pyw 代码

import time
import winsound
import subprocess
import os

# 自动获取当前脚本所在目录,准确定位同目录下的widget.py
current_dir = os.path.dirname(os.path.abspath(__file__))
widget_path = os.path.join(current_dir, "widget.py")

beep_time = 30 * 60
def beep_every60():
    while True:
        # 执行蜂鸣提醒
        winsound.Beep(2000, 1000)
        winsound.Beep(2000, 1000)
        # 调用打开GUI组件,用pythonw执行避免弹出黑色命令行窗口
        subprocess.Popen(
            ["pythonw", widget_path],
            creationflags=subprocess.CREATE_NO_WINDOW
        )
        time.sleep(beep_time)

beep_every60()

注意事项

  • 把beep.pyw和widget.py放在同一个文件夹下即可正常运行,如果你是把beep.pyw直接放在shell:startup开机启动目录,把widget.py也放到该目录即可
  • 若不想把源码都放在开机启动目录,可将两个文件放在任意固定目录,给beep.pyw创建快捷方式,再把快捷方式剪切到shell:startup目录即可
  • 如果系统没有把Python加入环境变量,把代码中的pythonw替换为你本地pythonw.exe的绝对路径即可,比如C:\Python310\pythonw.exe
  • 测试阶段可以把beep_time = 30*60临时改为beep_time = 10,验证蜂鸣和GUI弹窗功能正常后再改回原配置

备选方案:合并两个文件

如果希望只保留一个启动文件,可以选择合并方案:

  1. 把widget.py中的GUI代码封装为一个独立的启动函数,比如def show_rest_widget():
  2. 将封装好的函数代码复制到beep.pyw中
  3. 在蜂鸣逻辑后直接调用show_rest_widget()即可

该方案的缺点是两个功能耦合,后续调整任意功能都需要修改同一个文件,维护成本更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:07