Tkinter изображение не отображается - PullRequest
0 голосов
/ 08 декабря 2018

Я сделал этот кусок кода:

from tkinter import *
from PIL import ImageTk, Image
import sys
import getnew


class startUp:
    def __init__(self, master):
        master.title("Tag checker")
        master.resizable(False, False)


        img1 = ImageTk.PhotoImage(Image.open("images/ss.png"))
        cercaImg = Label(master, image = img1)
        cercaImg.bind("<Button-1>",clicka)
        cercaImg.grid(row=0,column=0)


        img2 = ImageTk.PhotoImage(Image.open("images/opz.png"))
        opzioniImg = Label(master, image = img2)
        opzioniImg.grid(row=0,column=1)


        img3 = ImageTk.PhotoImage(Image.open("images/exit.png"))
        esciImg = Label(master, image = img3)
        esciImg.bind("<Button-1>",(master.destroy and quit))
        esciImg.grid(row=0,column=2)

def clicka(event):
    print('ciaooo')
    x = getnew.getSchools()
    print(x[0][0],x[0][1],x[0][2])


root = Tk()
st = startUp(root)
root.mainloop()

Суть в том, чтобы иметь 3 изображения, которые при нажатии выполняют функцию, но он не отображается.Они отображаются в виде зоны размера и «кликабельной» зоны и выполняют функцию, но изображение как таковое не отображается.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 08 декабря 2018

Из tkinter Документы на PhotoImage:

Вы должны сохранить ссылку на объект изображения в вашей программе Python, либо храня его в глобальномпеременной, или прикрепив его к другому объекту.

Причина для этого заключается в следующем:

Когда объект PhotoImage собирается мусоромPython (например, когда вы возвращаетесь из функции, которая сохранила изображение в локальной переменной), изображение очищается, даже если оно отображается виджетом Tkinter.

Чтобы избежать этого, программа должна сохранитьдополнительная ссылка на изображение объекта.Простой способ сделать это - присвоить изображение атрибуту виджета.

Следовательно, для вашей программы:

img1 = ImageTk.PhotoImage(Image.open("images/ss.png"))
cercaImg = Label(master, image = img1)
cercaImg.image = img1 # Keep a reference

Аналогично и для других изображений.

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