最近做一个以图搜图的项目时,老师让做一个GUI的界面,因为之前学过tkinter所以信心满满的去做,结果搞了一下午,布局都没建好,瞬间崩溃。
项目的主要需求是:需要添加一个按钮,实现选择图片,并把图片和图片名显示到页面上,同时把相似度最高的图显示出来。
以下是一个点击按钮选择图片,并显示图片名和图片的一个demo
from tkinter import *
import tkinter.filedialog
from PIL import Image, ImageTk
# 只能使用GIF格式
# def choosepic():
# path_=tkinter.filedialog.askopenfilename()
# #获取图片路径
# path.set(path_)
# #print(path_)
# img_gif=tkinter.PhotoImage(file=path_)
# l1.config(image=img_gif)
# l1.image=img_gif#keep a reference
# 可使用其他格式图片,但需要PIL库
def choosepic():
path_ = tkinter.filedialog.askopenfilename()
# 获取图片路径
path.set(path_)
# print(path_)
img_open = Image.open(entry.get())
img = ImageTk.PhotoImage(img_open.resize((200,200)))#把图片缩放以下,不然太大了,放不下
l1.config(image=img)
l1.image = img # keep a reference
root = tkinter.Tk()#k是小写
root.title("图片显示")
#设置大小和位置
root.geometry("800x400+200+200")
# root = Tk()
path = StringVar()
button1 = Button(root, text='选择图片', command=choosepic)
button1.pack()
entry = Entry(root, state='readonly', text=path,width = 100)
entry.pack()
l1 = Label(root)
l1.pack()
root.mainloop()
以下是一个并列显示多张图片的demo
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
# 总共4张图片
img_list = ["001-0.jpg", "001-1.jpg", "002-0.jpg", "002-1.jpg"]
def load_img(index, item):
# 打开图片。
# resize():示例图片太大,这里缩小一些。
img = Image.open(item).resize((200, 200))
# 引用:添加一个Label,用来存储图片。使用PanedWindow也行。
panel = Label(master=root)
panel.photo = ImageTk.PhotoImage(img) # 将原本的变量photo改为panel.photo
# 图片用Label来显示,参数master改不改为panel都行,这里就不改了。
# 注意:参数image改为panel.photo
Label(master=root, image=panel.photo).grid(row=0, column=index)
# 使用for循环添加图片,enumerate:获取元素与其索引值
for index, item in enumerate(img_list):
load_img(index, item) # 执行函数
root.mainloop()
以下是项目中改动的部分代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C5vsrPcW-1634806535151)(C:\Users\12235\AppData\Roaming\Typora\typora-user-images\image-20211021165144462.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDztZkZC-1634806535152)(C:\Users\12235\AppData\Roaming\Typora\typora-user-images\image-20211021165218397.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-az6D909Y-1634806535153)(C:\Users\12235\AppData\Roaming\Typora\typora-user-images\image-20211021165300493.png)]
以上参考了这两篇文章,个人感觉很有用,补足了之前的不足之处。
https://blog.csdn.net/fjdmy001/article/details/78498150
https://blog.csdn.net/m0_50000839/article/details/120078530
01/article/details/78498150
https://blog.csdn.net/m0_50000839/article/details/120078530