Python: предотвращение появления «анимации» у кнопок Tkinter

#python #python-3.x #button #tkinter

#python #python-3.x #кнопка #tkinter

Вопрос:

При написании простой интерактивной программы для игры в крестики-нолики на Python, используя Tkinter для создания графического интерфейса, я столкнулся с проблемой при кодировании кнопки.

Всякий раз, когда вы нажимаете кнопку в графическом интерфейсе на основе Tkinter, кнопка имеет эту «анимацию», где, пока она нажата, она слегка «прыгает» вниз и вправо — и когда она отпущена, она возвращается к своей первоначальной форме. Мне было интересно, возможно ли предотвратить появление этой анимации, но при этом заставить кнопку выполнять команду при нажатии (другими словами: функционировать как кнопка, но выглядеть как обычное изображение).

Если это чего-то стоит, мой соответствующий код выглядит следующим образом:

 import tkinter
from PIL import Image, ImageTk

window = tkinter.Tk()
button_image = ImageTk.PhotoImage(Image.open(<path>))
button = tkinter.Button(window, image=button_image, borderwidth=0)
button.grid(row=1)

window.mainloop()
  

Заранее благодарю вас.

Комментарии:

1. Вероятно, вам вообще не нужна кнопка; поместите свое изображение на ярлык и используйте .bind() для обработки щелчков мыши по нему. Обратите внимание, что это ужасная идея с точки зрения дизайна пользовательского интерфейса, поскольку вы убираете все отзывы о том, что изображение действительно отреагировало на щелчок.

2. @jasonharper Я понимаю, но смысл в том, чтобы кто-то мог щелкнуть по одному из квадратов таблицы крестиков-ноликов, и там появилось ничто / крестик. Вся идея заключается в том, чтобы они не знали, что там на самом деле есть кнопка / метка; для них это просто выглядит так, как будто они нажимают на пустое место, и появляется ничто / крест. Однако, когда дело доходит до использования метки: я попробую это, спасибо за комментарий.

Ответ №1:

У меня есть новый ответ, что, если вы сделаете это?

 button_image = ImageTk.PhotoImage(Image.open(<path>))
for _ in range(5):
    button = tkinter.button(root, image=button_image, borderwidth=0, relief=SUNKEN)
    button.grid(row=1)
root.mainloop()
  

Ответ №2:

Может быть, вместо кнопки ярлык?

 panel = Label(root, image=button_image)
panel.image = button_image
panel.grid(row=1)
  

Комментарии:

1. Ваш ответ был бы немного лучше, если бы он также включал информацию о том, как вызывать функцию при нажатии на метку.

2. уф, я не думаю, что это возможно. Я думаю, что если вам нужно изображение на кнопке, вы можете перейти к Visual Studio C # forms, возможности python tkinter немного ограничены.

3. Это определенно возможно.