Выполнять симуляцию нажатия кнопки при нажатии клавиши в графическом интерфейсе Tkinter - PullRequest
0 голосов
/ 21 сентября 2019

Я создаю простой графический интерфейс калькулятора, я смог связать нажатия клавиш с нажатиями кнопок, и код работает хорошо.

Сейчас я пытаюсь имитировать нажатие кнопки, когда правая клавиша былаозначало, что, например, допустим, что на клавиатуре была нажата клавиша «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 ]

1 голос
/ 21 сентября 2019

Вместо немедленного вызова 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)
1 голос
/ 21 сентября 2019

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...