Python turtle库代码在IDLE运行遇input()后窗口无响应求助
问题根因
turtle底层基于Tkinter GUI框架,GUI窗口正常响应的前提是主线程持续运行Tkinter事件循环。你使用控制台input()语句时会直接阻塞主线程,事件循环停止运行,就会触发绘图窗口未响应的问题。
Trinket在线编程平台对turtle和input的交互做了自定义适配,所以可以正常运行,本地原生Python环境没有这类适配,加turtle.done()也没用,因为done()本身就是启动事件循环的方法,主线程被input()阻塞后这个方法根本无法正常执行。
解决方案
优先替换控制台输入为turtle原生的GUI输入框,无需改动其他业务逻辑,仅修改两处输入代码即可,输入返回值类型和input()完全一致,原有判断逻辑可以直接复用:
- 修改
putBall()函数中的输入代码
原代码:
print("which column to put your ball?") column=input()
替换为:
column = turtle.textinput("落子选择", "请输入要落子的列号(1-5):")
- 修改游戏结束后询问是否重开的输入代码
原代码:
print('Do you want to play again?') playAgain=input()
替换为:
playAgain = turtle.textinput("游戏结束", "是否再来一局?输入yes/no:")
修改完成后运行即可避免窗口未响应的问题。
内容的提问来源于stack exchange,提问作者michael
相关产品推荐
相关产品推荐

