使用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
相关产品推荐
相关产品推荐

