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

时间:2019-09-21 15:44:27

标签: python python-3.x tkinter

我正在构建一个简单的计算器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')

不胜感激

2 个答案:

答案 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)