我正在构建一个简单的计算器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')
我的另一种尝试是在add="+"
中使用bind()
,但是它也不起作用,它只调用了第一个绑定,并且键卡在了“笔画”模式下,这意味着它只是调用第一个绑定函数而不是第二个:
...
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')
不胜感激
答案 0 :(得分:1)
您可以使用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()
答案 1 :(得分:1)
在短暂的延迟后,请使用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)