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

使用Tkinter按钮打开turtle输入框后,turtle.listen()无响应

问题解决:Tkinter按钮调用turtle输入框后方向键失效

问题原因

调用turtle.numinput()或turtle.textinput()后,输入对话框会夺走焦点,关闭对话框后焦点不会自动回到turtle绘图窗口,导致之前设置的键盘监听listen()失效,方向键无法控制turtle。

修复方案

在输入对话框关闭后,重新调用turtle.listen(),让turtle重新监听键盘事件。同时处理用户点击取消按钮的情况(此时numinput()会返回None),避免报错。

修改后的完整代码

from tkinter import *
from turtle import *

def ask():
    someinputs = numinput('Test', 'Input size:', default=1, minval=0, maxval=999)
    if someinputs is not None:  # 处理用户取消输入的情况
        pensize(someinputs)
    listen()  # 重新开启键盘监听

root = Tk()

Label(root, text='Settings:\n').pack()
Button(root, text='Pensize', command=ask).pack()
Label(root, text=' ').pack()

def up():
    fd(100)
def down():
    bk(100)
def left():
    lt(90)
    fd(100)
def right():
    rt(90)
    fd(100)

onkey(up, 'Up')
onkey(down, 'Down')
onkey(left, 'Left')
onkey(right, 'Right')
listen()

mainloop()

额外优化

如果希望焦点更稳定,可以在listen()前加上turtle.getcanvas().focus_set(),强制让turtle画布获取焦点:

def ask():
    someinputs = numinput('Test', 'Input size:', default=1, minval=0, maxval=999)
    if someinputs is not None:
        pensize(someinputs)
    getcanvas().focus_set()  # 让turtle画布获取焦点
    listen()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:57:19