【发布时间】:2020-08-27 06:44:09
【问题描述】:
我对 Python 和 tkinter 非常陌生。我正在使用 tkinter 开发键盘。我创建了一个文本框,我正在尝试将键绑定到它,以便用户可以使用键盘进行输入。我想在按下一个键时打印不同的键。例如,我想在按下“p”时打印 P,当按下“a”时打印 A。我知道我可以手动输入每个键并添加一个函数来打印所需的值,但这会很耗时,所以我决定使用字典。
下面是这个的代码。
def print_letter(letter):
if letter == "backspace":
text.configure(state="normal")
value = text.get("1.0", "end")
text.delete("1.0", "end")
text.insert("1.0", value[:-2])
text.configure(state="disabled")
else:
text.configure(state="normal")
text.insert("end", letter)
text.configure(state="disabled")
letters = {
'a': 'A',
'b': 'B',
'c': 'C',
'd': 'D',
'e': 'E',
}
root = tk.Tk()
root.geometry("800x415")
root.resizable(False, False)
text = tk.Text(text_frame, width=97, height=15)
text.configure(state="disabled")
text.grid(row=0, column=0, sticky="EW")
text.focus_set()
for key, value in letters.items():
text.bind(key, lambda value: print_letter(letters.get(key)))
但只有字典中的最后一个值绑定到我按下的任何键。我在 SO 上看到了一些帖子,他们都建议了以下选项:
- text.bind(key, lambda value=value: print_letter(letters.get(key)))
- text.bind(key, lambda args=value: print_letter(letters.get(key)))
以上所有都给了我相同的结果。
感谢任何帮助。
【问题讨论】:
标签: python-3.x tkinter lambda