#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. Это определенно возможно.