【发布时间】:2019-12-09 18:55:35
【问题描述】:
我写了一个 Tkinter,我希望有一个 Listener 来监控用户的键盘输入。但是当我使用mainloop()启动Tkinter时,Listener不能和它一起工作,直到我退出Tkinter才会启动。
我曾尝试在 Tkinter 子单元中添加此 Listener,但效果不一样。
def initialization():
print("Starting...")
print("Start listener...")
with mouse.Listener(on_click=onMouseClick) as listener:
listener.join()
if __name__ == "__main__" :
root = tk.Tk()
root.geometry('800x80')
root.resizable(height=True, width=True)
root.overrideredirect(False)
root.title('vENC Console')
OneBtn = Button(root, command=initialization, text="One Button", width='30')
root.mainloop()
我怎样才能让他们一起工作?我需要使用多线程吗?
【问题讨论】:
-
当用户关注或不关注 tkinter 时,您是否尝试监控鼠标点击?
-
@HenryYik 其实我想监听键盘输入,比如当用户发送 F5 键时,我会在 Tkinter 中做一些动作。
-
他们的网站上有一个非阻塞的解决方案。
listener = mouse.Listener(...)然后listener.start()。 -
我尝试使用 Thread.start 和 Join,但效果不一样。
-
鼠标监听器是一个threading.Thread,所以如果你调用
listen.join(),它会等待线程终止并阻塞tkinter的主线程。我不确定什么不一样 - 你能澄清一下吗?
标签: python python-3.x multithreading tkinter pynput