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弹窗功能正常后再改回原配置
备选方案:合并两个文件
如果希望只保留一个启动文件,可以选择合并方案:
- 把widget.py中的GUI代码封装为一个独立的启动函数,比如
def show_rest_widget(): - 将封装好的函数代码复制到beep.pyw中
- 在蜂鸣逻辑后直接调用
show_rest_widget()即可
该方案的缺点是两个功能耦合,后续调整任意功能都需要修改同一个文件,维护成本更高。
内容的提问来源于stack exchange,提问作者Marinos TBH
相关产品推荐
相关产品推荐

