如何修复Python番茄钟代码中的WNDPROC报错信息?
解决win10toast库运行时WNDPROC消息输出问题
这些WNDPROC相关消息不是程序错误,是win10toast底层依赖的win32gui模块输出的调试日志——win10toast创建通知窗口时,Windows系统会给窗口过程函数(WNDPROC)发送各类窗口消息,底层模块默认把这些消息打印到终端了。
给你三个可行的解决办法:
临时屏蔽终端输出
在代码最开头加一段重定向输出的代码,把所有终端输出导向空设备,直接屏蔽这类调试消息:import sys sys.stdout = open('nul', 'w') sys.stderr = open('nul', 'w')要是你需要保留自己代码里的
print内容,可以改用上下文管理器临时屏蔽,只在调用show_toast的时候生效:import sys from contextlib import contextmanager @contextmanager def suppress_output(): original_stdout = sys.stdout original_stderr = sys.stderr sys.stdout = open('nul', 'w') sys.stderr = open('nul', 'w') try: yield finally: sys.stdout.close() sys.stderr.close() sys.stdout = original_stdout sys.stderr = original_stderr # 调用show_toast时用这个上下文 with suppress_output(): toast.show_toast("标题", "内容")修改win10toast源码
找到你Python环境里win10toast的安装目录(比如Lib/site-packages/win10toast),打开__init__.py,找到ToastNotifier类里的WndProc函数,把里面的print语句删掉就行——这类调试打印本来就是开发时的临时代码,删掉不影响功能。换用更干净的通知库
直接换成plyer库,它跨平台,不会输出这类冗余调试信息,用法也简单:
先安装:pip install plyer
然后替换你的通知逻辑:from plyer import notification import time def tomato_timer(): # 工作25分钟 time.sleep(25*60) notification.notify( title="番茄钟提醒", message="工作时段结束,该休息5分钟了!", timeout=10 ) # 休息5分钟 time.sleep(5*60) notification.notify( title="番茄钟提醒", message="休息结束,继续专注工作吧!", timeout=10 ) if __name__ == "__main__": tomato_timer()
内容的提问来源于stack exchange,提问作者AdvR
相关产品推荐
相关产品推荐

