【发布时间】:2019-11-14 06:04:40
【问题描述】:
我是一名教师。我教数学,但由于教育面临人力资源危机,我还有一些额外的职责。我教孩子们一些编程,他们做得很好。现在我想和他们一起做一个蛇游戏,但是在我的 GUI 应用程序中实现多线程时遇到了问题。
我发现了类似的案例,但没有解决方案。像这儿: Using the keyboard to move the character in a maze 和这里: Tkinter.Tk() and threading
def on_press(key):
print('{0} pressed'.format(key))
def on_release(key):
if key == Key.esc:
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
root = Tk()
root.mainloop()
我希望窗口与侦听器同时运行。相反,我的代码监听键盘,然后(在我击落监听器之后)弹出窗口。当我在调用主循环后调用监听器时它会反转,然后首先出现窗口,在我击落它之后,监听器开始工作。
【问题讨论】:
-
我不知道为什么你需要 Listener 和线程来在 Tkinter 中创建游戏。你可以不使用线程(即使用
tk.after())和不使用Listener使用root.bind('<KeyPress>', on_press),root.bind('<KeyRelease>', on_release) -
tkinter 示例使用
root.bind()在画布上移动桨(上/下):github.com/furas/python-examples/blob/master/tkinter/… -
你为什么不使用 tkinter 的监听事件的能力?为什么需要使用
Listener类? -
不了解 tkinter 解决方案。你太棒了,谢谢。现在一切正常。但是,可以肯定的是,既然你写了“你可以在没有线程的情况下做到这一点”,那么绑定不会创建一个线程吗?
标签: python tkinter window listener pynput