Я не могу загрузить изображение в ярлык, я пробовал много способов, но всегда получаю ошибку. Как я могу это исправить? Я могу открыть файл и выбрать изображение, но не могу отобразить его на ярлыке

def openImageFile():
    global imPath
    imPath = filedialog.askopenfilename(initialdir="C:\\\", title = "Открыть изображение", filetypes = (("PNG файл", "*.png"), ("JPEG файл","*.jpeg"), ("JPG файл","*.jpg"), ("Все типы файлов","*.*")) )
    возвращает True


def myApp(appName:str, WIDTH:int, HEIGHT:int):
    
    appWin = tk.Tk()
    appWin.title(appName)
    
    appWin.geometry(str(WIDTH)+'x'+str(HEIGHT))
    
    #FRAME
    myFrame = tk.Frame(master = appWin, bg='light gray')
    myFrame.place(relwidth = 0.98, relheight = 0.28, relx = 0.01 ,rely=0.01)
    

    btnUploadImage = tk.Button(myFrame, text="Загрузить изображение", command = lambda: openImageFile() )
    #Butonun uygulama ekranina eklenmesi
    btnUploadImage.place(x=300,y=160)
    
    img=ImageTk.PhotoImage(Image.open(imPath))
    
    #ЭТИКЕТКА
    firstName = tk.Label(appWin, bg='light gray', text="Имя").place(x=10,y=40)
    middleName = tk.Label(appWin, bg='light gray', text="Middle Name").place(x=10,y=70)
    фамилия = tk.Label(appWin, bg='light gray', text="Фамилия").place(x=10,y=100)
    dateOfBirth = tk.Label(appWin, bg='light gray', text="Дата рождения").place(x=10,y=130)
    photo=tk.Label(appWin, image=img).place(relwidth=0.30,relheight=0.15,x=250,y=40)

Ümran

Ответов: 1

Ответы (1)

Вы делаете несколько вещей неправильно. Во-первых, метод place возвращает None, поэтому присвоение переменной не имеет эффекта, так что photo=tk.Label (appWin, image=img).place(relwidth=0.30,relheight=0.15,x=250,y=40) должно быть

photo=tk.Label(appWin, image=img)
photo.place(relwidth=0.30,relheight=0.15,x=250,y=40)

в две отдельные строки. аналогично для других переменных.

Чтобы отобразить изображение на виджете Label при загрузке, используйте метод configure.

Также поместите img=ImageTk.PhotoImage(Image.open(imPath)) в функцию openImageFile, поскольку imPath не определен до нажатия кнопки.

Здесь приведен исправленный код:

import tkinter as tk
from PIL import ImageTk, Image
из tkinter import filedialog

def openImageFile():
    global img, photo
    imPath = filedialog.askopenfilename(initialdir="C:\\\", title = "Открыть изображение", filetypes = (("PNG файл", "*.png"), ("JPEG файл","*.jpeg"), ("JPG файл","*.jpg"), ("Все типы файлов","*.*")) )

    if imPath:
        img=ImageTk.PhotoImage(Image.open(imPath))
        photo.configure(image=img)

def myApp(appName:str, WIDTH:int, HEIGHT:int):
    глобальная фотография
    appWin = tk.Tk()
    appWin.title(appName)
    
    appWin.geometry(str(WIDTH)+'x'+str(HEIGHT))
    
    #FRAME
    myFrame = tk.Frame(master = appWin, bg='light gray')
    myFrame.place(relwidth = 0.98, relheight = 0.28, relx = 0.01 ,rely=0.01)
    

    btnUploadImage = tk.Button(myFrame, text="Загрузить изображение", command = openImageFile)
    #Butonun uygulama ekranina eklenmesi
    btnUploadImage.place(x=300,y=160)

    #LABEL
    firstName = tk.Label(appWin, bg='light gray', text="First Name").place(x=10,y=40)
    middleName = tk.Label(appWin, bg='light gray', text="Middle Name").place(x=10,y=70)
    фамилия = tk.Label(appWin, bg='light gray', text="Фамилия").place(x=10,y=100)
    dateOfBirth = tk.Label(appWin, bg='light gray', text="Дата рождения").place(x=10,y=130)

    photo=tk.Label(appWin)
    photo.place(relwidth=0.30,relheight=0.15,x=250,y=40)

    appWin.mainloop()
    
myApp('hello', 500, 500)

2022 WebDevInsider