如何更改 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()