当前位置:   article > 正文

在tkinter中显示图片和图片名_python tk root.image_names

python tk root.image_names

Python之解决tkinter.PhotoImage不显示图片的问题 Python3

最近做一个以图搜图的项目时,老师让做一个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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

以下是一个并列显示多张图片的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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

以下是项目中改动的部分代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/124864
推荐阅读
相关标签
  

闽ICP备14008679号