本文解决使用graphics.py库时因`getmouse()`阻塞导致按键无法即时响应的问题,通过改用非阻塞的`checkmouse()`和`checkkey()`方法,并优化循环逻辑,实现按下“1”键立即改变最新绘制圆圈颜色的功能。
在使用 graphics.py 构建交互式图形程序时,一个常见却容易被忽视的陷阱是:win.getMouse() 是阻塞式调用——它会挂起整个程序,直到用户点击窗口,期间完全无法响应键盘事件(如 ‘1’ 键)。这正是原代码中“按一次没反应,再按一次才生效”的根本原因:每次循环都卡在 win.getMouse() 上,win.checkKey() 几乎没有执行机会。
要实现真正的实时响应,必须将输入检测全部改为非阻塞模式,即统一使用 win.checkMouse() 和 win.checkKey(),并在主循环中高频轮询。以下是重构后的专业实践方案: