Использование Tkinter 8.6, Python 3.7.3:
Дружелюбный пользователь рассказал мне, как заставить изображение действовать как кнопка, создав класс Imgbutton
, который является подклассом Tkinter Canvas
.
У меня есть несколько вопросов относительно этого кода, вот его упрощенная версия:
#!/usr/local/bin/python3
import tkinter as tk
from PIL import Image, ImageTk
class Imgbutton(tk.Canvas):
def __init__(self, master=None, image=None, command=None, **kw):
super(Imgbutton, self).__init__(master=master, **kw)
self.set_img = self.create_image(0, 0, anchor='nw', image=image)
self.bind_class( self, '<Button-1>',
lambda _: self.config(relief='sunken'), add="+")
self.bind_class( self, '<ButtonRelease-1>',
lambda _: self.config(relief='groove'), add='+')
self.bind_class( self, '<Button-1>',
lambda _: command() if command else None, add="+")
Вопросы:
- Когда я создаю объект
Imgbutton
, выполняется разделенная строка выше, но я не понимаю, почему.
- Соответствует ли
self.set_img
объекту Imgbutton
или tk.Canvas
класса?
- Есть ли здесь точка, где создается настоящий холст? Я считал, что вам нужно создать холст, прежде чем вы сможете что-то добавить к нему.
Эта часть может быть ненужной для упоминания, но здесь я создаю Imgbutton
объект:
root = tk.Tk()
but_img = tk.PhotoImage(file='button.png')
but = Imgbutton(root, image=but_img, width=but_img.width(),
height=but_img.height(), borderwidth=2, highlightthickness=0)
but.pack()
root.mainloop()