在 Tkinter GUI 中按键时执行模拟按钮按下



我正在构建一个简单的计算器 GUI,我能够将击键绑定到按钮单击并且代码运行良好。

我现在要做的是模拟在敲击右键时单击按钮,这意味着例如,假设键盘上的键"5"被按下,我希望按钮"5"看起来像是被按下的

到目前为止,我的尝试包括使用一个虚拟函数,该函数调用其他 2 个函数,这些函数应该完全按照我描述的方式执行,但它不起作用:

def numeric_keystroke_action(self, event):
k = find_key_from_value(calculator_button_text, event.char)
self.simulate_button_press(k)
self.click(event.char, False)
self.simulate_button_idle(k)
def simulate_button_press(self, key):
self.buttons[key].configure(style='pressed_style.TButton')
def simulate_button_idle(self, key):
self.buttons[key].configure(style='idle_style.TButton')

我的另一个尝试是在bind()中使用add="+",但它也没有用,它只调用了第一个绑定,键卡在"stroke"模式下,这意味着它只调用第一个绑定函数而不是第二个:

...
self.master.bind(k, lambda event: self.numeric_keystroke_action(event))
self.master.bind(k, lambda event: self.simulate_button_idle(key), add="+")
...
def numeric_keystroke_action(self, event):
k = find_key_from_value(calculator_button_text, event.char)
self.simulate_button_press(k)
self.click(event.char, False)
#self.simulate_button_idle(k)
def simulate_button_press(self, key):
self.buttons[key].configure(style='pressed_style.TButton')
def simulate_button_idle(self, key):
self.buttons[key].configure(style='idle_style.TButton')

将不胜感激一些帮助

您可以使用btn.invoke()来模拟单击按钮:

import tkinter as tk
def _key_(k):
print(k)
btn.invoke()
def _5():
print(5)
root = tk.Tk()
btn = tk.Button(root, text='_____5_____', command=_5)
btn.pack()
root.bind('5', _key_)
root.mainloop()

不要立即调用simulate_button_idle,而是使用after在短暂延迟后调用它:

def numeric_keystroke_action(self, event):
k = find_key_from_value(calculator_button_text, event.char)
self.simulate_button_press(k)
self.after(250, self.simulate_button_idle, k)
self.click(event.char, False)

最新更新