По моему мнению, самый простой способ сделать это - прикрепить изображение к Button
вместо Label
виджета, потому что тогда все, что вам нужно будет сделать, это указать аргумент command=
, ссылающийся на функцию, которую выхочу, чтобы его вызывали при нажатии.
Вот что я имею в виду:
import tkinter as tk
def make_newwindow():
global newwindow
raiz.withdraw()
newwindow = tk.Toplevel()
newwindow.title('Nível da grama região 2')
newwindow.geometry('580x520')
raiz = tk.Tk()
raiz.title('Nível da grama região 1')
raiz.geometry("580x520")
picture = tk.PhotoImage(file="picure.png")
btn0 = tk.Button(raiz, image=picture, borderwidth=0, highlightthickness=0,
command=make_newwindow)
btn0.place(x=62, y=205)
raiz.mainloop()
Если вы действительно хотите по какой-то причине использовать Label
, вы можете вызвать универсальный bind()
метод виджета для присоединения вашей функции к нажатию кнопки мыши-1 события .
Для этого измените приведенный выше код, чтобы он создал Label
(как вашкод), но также вызывает bind()
, как показано на рисунке. Обратите внимание, как функция обратного вызова создается динамически с помощью выражения lambda
. Это необходимо, потому что ваш make_newwindow()
не принимает никаких аргументов. Однако tkinter
функциям обратного вызова обработчика событий передается аргумент event
(см. События и привязки ). Поскольку здесь он не нужен, аргумент просто игнорируется и ему присваивается имя _
(соглашение Python для таких вещей).
...
picture = tk.PhotoImage(file="picure.png")
label0 = tk.Label(raiz, image=picture, borderwidth=0, highlightthickness=0)
label0.place(x=62, y=205)
label0.bind('<Button-1>', lambda *_: make_newwindow()) # Create and bind callback func.
raiz.mainloop()