簡體   English   中英

如何在 tkinter 中僅綁定 ASCII 鍵?

[英]How to bind ONLY ASCII keys in tkinter?

我只想使用 tkinter 綁定 ASCII 鍵。我知道如何有選擇地(按鍵)綁定它,甚至將它綁定到所有鍵盤鍵(通過使用<Key><KeyPress> ),但問題是,我不知道知道如何對每個 ASCII 鍵執行相同的操作。

到目前為止,這是我嘗試過的:

  1. 使用<Key><KeyPress>綁定來捕獲所有鍵盤鍵(不支持鼠標鍵):
import tkinter as tk

def key_press(event):
    label.config(text = f'char Pressed: {event.char!r}')
    label2.config(text=f'keysym Pressed: {event.keysym!r}')

root = tk.Tk()
label = tk.Label(root, text='Press a key')
label2 = tk.Label(root, text='Press a key')
label.pack()
label2.pack()
root.bind('<Key>', key_press)
root.mainloop()
  1. 使用每個鍵綁定(首先需要知道名稱/keysym,如tkinter 文檔所示):
import tkinter as tk

def key_press(event):
    label.config(text = f'char Pressed: {event.char!r}')
    label2.config(text=f'keysym Pressed: {event.keysym!r}')

root = tk.Tk()
label = tk.Label(root, text='Press a key')
label2 = tk.Label(root, text='Press a key')
label.pack()
label2.pack()
# here we only use the K and BackSpace key as example
root.bind('<BackSpace>', key_press)
root.bind('<K>', key_press)
root.mainloop()

如何僅使用 tkinter 將 function 綁定到所有 ascii 鍵? (如果可能,沒有第三方模塊)

在我看來,僅綁定ascii 字符的最簡單有效的解決方案是使用event.char event.char對應於%A ,如果沒有解析可打印字符,則為空字符串。 要訪問單個字符,您可以使用repr ,因為它在 tkinter 中實現

我沒有使用event.keycode因為對於Multi_key它們似乎不可靠。 還包括del -key 但沒有找到更好的方法來使用keysym ,請隨意尋找更好的方法

示例代碼:

import tkinter as tk

def isascii(event):
    if event.char != '':
        char = list(event.char)[0] #'^' or '`' is only parsed as doubles in Windows
        if ord(char) <= 127: #avoid non-ascii like '²' or '³' or '´'
            print(
                repr(char), #printable character
                ord(char) #corresponding ascii value
                )
    elif event.keysym == 'Delete':
        print('backspace / delete', 127)

root = tk.Tk()
root.bind('<Key>', isascii)
root.mainloop()

壓縮版:

import tkinter as tk

def isascii(event):
    if event.char != '' and ord((char := list(event.char)[0])) <= 127:
        print(
            repr(char), #printable character
            ord(char) #corresponding ascii value
            )
    elif event.keysym == 'Delete': print('delete', 127)

root = tk.Tk()
root.bind('<Key>', isascii)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM