如何更改 tkinter 标签文本以显示按键信息?
How can I change a tkinter label text to display key press information?
我正在努力做到这一点,以便用户可以使用热键 start/stop 程序。我有一个标签来显示当前设置的热键和一个允许他们更改它的按钮(我正在使用 Pynput 来检测按键)。
该按钮链接到以下代码:
def set_Hotkey():
def on_press(key):
global hotkey
hotkey = key
listener.stop()
key_label.config(text=f'{key}')
def on_release(key):
pass
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
我也尝试过使用 StringVar,并尝试将文本设置为 str(key)
而不是 f'{key}'
都无济于事。
每当我 运行 程序启动正常,如果我用 print(key)
或 print(str(key))
替换 key_label.config()
行,它不会打扰。但是,当我尝试设置标签文本以显示按下的键时,程序冻结并且我被迫将其关闭。我的控制台没有收到任何形式的错误消息,它只是死机了。
有人可以解释这里发生了什么以及如何解决它吗?
pynput.keyboard.Listener()
也是一个线程,所以调用join()
会阻塞tkinter
mainloop.
变化:
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
至:
listener = Listener(on_press=on_press, on_release=on_release)
listener.start()
我正在努力做到这一点,以便用户可以使用热键 start/stop 程序。我有一个标签来显示当前设置的热键和一个允许他们更改它的按钮(我正在使用 Pynput 来检测按键)。
该按钮链接到以下代码:
def set_Hotkey():
def on_press(key):
global hotkey
hotkey = key
listener.stop()
key_label.config(text=f'{key}')
def on_release(key):
pass
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
我也尝试过使用 StringVar,并尝试将文本设置为 str(key)
而不是 f'{key}'
都无济于事。
每当我 运行 程序启动正常,如果我用 print(key)
或 print(str(key))
替换 key_label.config()
行,它不会打扰。但是,当我尝试设置标签文本以显示按下的键时,程序冻结并且我被迫将其关闭。我的控制台没有收到任何形式的错误消息,它只是死机了。
有人可以解释这里发生了什么以及如何解决它吗?
pynput.keyboard.Listener()
也是一个线程,所以调用join()
会阻塞tkinter
mainloop.
变化:
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
至:
listener = Listener(on_press=on_press, on_release=on_release)
listener.start()