首页 > 解决方案 > 如何使用 python tkinter 将所选图像上传到标签中?

问题描述

我无法将图像上传到标签中,我尝试了很多方法,但总是出现错误。我该如何解决?我可以打开文件,我可以选择图像,但我无法在标签上显示它

def openImageFile():
    global imPath
    imPath = filedialog.askopenfilename(initialdir="C:\\", title = "Open an image", filetypes = (("PNG file","*.png"), ("JPEG File","*.jpeg"), ("JPG File","*.jpg"), ("All File Types","*.*")) )
    return 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="Upload Image", command = lambda: openImageFile() )
    #Butonun uygulama ekranina eklenmesi
    btnUploadImage.place(x=300,y=160)
    
    img=ImageTk.PhotoImage(Image.open(imPath))
    
    #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)
    surname = tk.Label(appWin, bg='light gray', text="Surname").place(x=10,y=100)
    dateOfBirth = tk.Label(appWin, bg='light gray', text="Date of Birth").place(x=10,y=130)
    photo=tk.Label(appWin, image=img).place(relwidth=0.30,relheight=0.15,x=250,y=40)

标签: pythonimagetkinter

解决方案


你做错了很多事情。首先,该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 functionimPath 中,直到按下按钮才定义。

这是更正后的代码:

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

def openImageFile():
    global img, photo
    imPath = filedialog.askopenfilename(initialdir="C:\\", title = "Open an image", filetypes = (("PNG file","*.png"), ("JPEG File","*.jpeg"), ("JPG File","*.jpg"), ("All File Types","*.*")) )

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

def myApp(appName:str, WIDTH:int, HEIGHT:int):
    global photo
    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="Upload Image", 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)
    surname = tk.Label(appWin, bg='light gray', text="Surname").place(x=10,y=100)
    dateOfBirth = tk.Label(appWin, bg='light gray', text="Date of Birth").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)

推荐阅读