Проблемы с привязками кнопок и поведением tkinter - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь выяснить, как заставить клавишу ввода вести себя так же, как клавиша пробела в tkinter. Пока единственное, что подошло, - это привязка клавиши ввода к кнопке. Это функционирует, пока все хорошо.

НО: визуально они не одинаковы. Когда вы нажимаете пробел, рельеф кнопки на мгновение меняется на SUNKEN. Привязка клавиш или вызов invoke () не имеют такого же визуального эффекта.

При попытке найти ответ я, возможно, обнаружил ошибку. При нажатии кнопки в течение 5-10 секунд с пробелом, RELIEF постоянно меняется на SUNKEN. Независимо от того, как долго вы ждете. Итак, это еще одна вещь, для которой мне нужно обойти. Возможно, после вызова функции сбрасывается состояние кнопки .... Я попробую это.

Вот пример кода, который не работает должным образом:

import tkinter as tk

root = tk.Tk()
root.geometry("300x200")
# if you press the enter key, buttons will call their own invoke function
# yet they won't show the effect of pressing space or clicking a button.
# When you press space or click a button the RELIEF will get changed.
# HOWEVER: When you hold space, the relief will get changed to SUNKEN permanently.
# That might me a bug.
root.bind_class("Button", "<Key-Return>", lambda event: event.widget.invoke())

def onclick():
    print("You clicked the button")

button = tk.Button(root, text="click me", command=onclick)
button.pack()

# it's not a callback issue that the button remains SUNKEN after holding space for a bit.
button2 = tk.Button(root, text="this button has no command")    
button2.pack()

root.mainloop()

РЕДАКТИРОВАТЬ: Я на win10.

1 Ответ

0 голосов
/ 08 мая 2020

Решение @ acw1668 опубликовано работает как шарм.

Код теперь:

import tkinter as tk

root = tk.Tk()
root.geometry("300x200")
# When you hold space, the relief will get changed to SUNKEN permanently.
# That might me a bug.
root.bind_class("Button", "<Key-Return>", lambda event: event.widget.event_generate("<space>"))

def onclick():
    print("You clicked the button")

button = tk.Button(root, text="click me", command=onclick)
button.pack()

# it's not a callback issue that the button remains SUNKEN after holding space for a bit.
button2 = tk.Button(root, text="this button has no command")    
button2.pack()

root.mainloop()

Однако это не решает затонувшую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...