Bartłomiej 'furas' Burek
furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Tkinter Przykład: użycie pynput keyboard listener

W dokumentacji można zobaczyć przykład dla Monitoring The keyboard

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

który blokuje kod ale kod można wstawić między linie

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:

    # ... your code ...

    listener.join()

lub można uruchomić to w inny sposób

listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start()

# ... your code ...

listener.stop()

W przypadku thinter to będzie miało postać

import tkinter as tk
from pynput.keyboard import Listener, Key

# --- functions ---

def on_press(key): # `key` can be `Key` (which doesn't have `char`) or `KeyCode` (which have `char`)
    global listen 

    #print(str(key) == "'1'", str(key))

    #if key == Key.esc:
    if str(key) == 'Key.esc':
        listen = not listen

    if listen:
        #if hasattr(key, 'char') and key.char == '1': # there is no `Key.1` and `1` 
        if str(key) == "'1'": # it needs `' '` in string
            label_var.set(label_var.get()+'1')
            print('1!')

# --- main ---

listen = False

root = tk.Tk()

label_var = tk.StringVar()

label = tk.Label(root, textvariable=label_var, width=10)
label.pack()

listener = Listener(on_press=on_press)
print('start')
listener.start()
try:
    listener.wait()
    print('mainloop')
    root.mainloop()
finally:
    print('stop')
    listener.stop()
    print('end')
    # without `listener.join()` because it runs as `daemon`
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury