python - 如何使用 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)
解决方案
你做错了很多事情。首先,该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 function
imPath 中,直到按下按钮才定义。
这是更正后的代码:
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)
推荐阅读
- node.js - 从 ldapjs 搜索中获取特定对象属性
- electron - 有没有办法从 electron.js 二进制文件中去除未使用的功能
- datatables - jQuery Datatable:页脚和页眉不会随表格水平滚动
- mysql - 如何选择某些“id”的总和并按组划分结果
- php - 如何使用 PHP for 循环按升序将数据插入 ORACLE 数据库?
- swift - FSCalendar 事件点未显示
- git - 如何在不丢失更改的情况下恢复提交?
- jsonparser - ActivePivot:将多维 Cellset 数据解析为 JSON 以用于 React-vis 图表
- python - 如何正确设置qgis python环境
- excel - 将报表表单 SSRS 导出到 Excel 仅将小数添加到 0.00 值