Tkinter绑定到

问题描述 投票:0回答:1
时会双重打印字符

我有一系列的16个Tk Entry小部件,我想将事件绑定到任何可见效果的键(例如a,7和*),而没有立即可见效果的键都具有而是将其键符号表示形式放置到位(Return,Tabx,Shift_L等))

如果我将绑定到每个这些Entry窗口小部件,则具有可见event.char的所有内容都会打印两次。看不见的东西没有。如果我将绑定到根,则不会发生。

考虑到我的实际程序有几个按钮和一个画布,将绑定到root是一个坏主意吗?如果是这样,我如何将其分别绑定到每个小部件,并避免在没有空event.char的情况下重复打印任何内容?

#!/usr/bin/env python
#sample.py
import tkinter as tk

def set_key(event):
    print(f"Key: '{event.char}', '{event.keysym}'")
    focus = root.focus_get()
    focus.delete(0, tk.END)
    if (event.char.split() != []):
        focus.insert(0, event.char)
    else:
        focus.insert(0, event.keysym)

root = tk.Tk()
root.option_add("*Font", "24")

keys = ["1", "2", "3", "4", "q", "w", "e", "r", "a", "s", "d", "f", "z", "x", "c", "v"]
keyboard_entries = []
for idx in range(16):
    keyboard_entries.append(tk.Entry(root, width=7))
    keyboard_entries[idx].grid(row=(idx//4), column=(idx%4))
    keyboard_entries[idx].insert(0, keys[idx])
    #keyboard_entries[idx].bind("<Key>", set_key) #Problematic

root.bind("<Key>", set_key) #Not problematic
root.mainloop()

Results when binding to rootResults when binding to each Entry

我有一系列的16个Tk Entry窗口小部件,我想将事件绑定到这样的事件,以便填充任何具有可见效果的东西(如a,7和*),而没有立即可见效果的任何键.. 。

python tkinter tkinter-entry
1个回答
0
投票
考虑到我的实际程序有几个按钮和一个画布,绑定到根目录不是个好主意吗?
© www.soinside.com 2019 - 2024. All rights reserved.