我们需要做一个图片查看器,那么首先要能显示图片,所以需要一个能将文件夹中的图片load到程序中, 在程序界面上需要一个能显示图片的控件,这样至少 能显示一张图片了。要实现查看功能,那就得可以左右切换图片, 因此需要俩按扭来控制。再加一行能显示当前图片和总图片张数,就更完美了。 以上分析做完了,那我们就开始码代码吧
import tkinter as tk
#此处需要引入glob库,此库的作用见下面注释
import glob
#此处需要引入Image库,imageTk类
from PIL import Image,ImageTk
'''
我们需要做一个图片查看器,那么首先要能显示图片,所以需要一个能将文件夹中的图片load到程序中,
在程序界面上需要一个能显示图片的控件,这样至少 能显示一张图片了。要实现查看功能,那就得可以左右切换图片,
因此需要俩按扭来控制。再加一行能显示当前图片和总图片张数,就更完美了。
以上分析做完了,那我们就开始码代码吧
'''
#先画一个能显示所有内容的载体,即使用Tk的属性可以画一个面板
#这里用到了geometry,通过查资料,geometry('wxh +x +y') w为宽度,h为高度,中间那个是小写的x,大写的X或者*均不可以。
#+x表示距离屏幕左边的距离,-x表示距离屏幕右边的距离,
#+y表示距离屏幕上边的距离,-y表示距离屏幕下边的距离,
root = tk.Tk()
root.geometry('1080x960+100+100')
root.title('图片查看器')
'''
glob()函数,是种文件通配符,非常常用。glob模块提供了函数用于从目录通配符搜索中生成文件列表:
Python glob()函数用法
glob()函数可以查找符合自己要求的文件,
支持通配符操作*,**,?,[]这四个通配符,
'''
photos = glob.glob('photo/*.jpg')
print(photos)
#打开图片Image.open函数
'''
由于PhotoImage不支持jpg格式的问题,因此,这里需要用到Image + ImageTk 来实现
将上述photos图片列表中的图片进行遍历,然后通过Image.open函数打开每一张图片
再通过ImageTk.PhotoImage来加载图片对像,赋值给photoss
'''
photoss = [ImageTk.PhotoImage(Image.open(photo)) for photo in photos]
print(photoss)
current_photo_no = 0
#此处用来将photoss的序号为0的图片显示在界面的lable上,并设置图片显示的宽度和高度
photo_lable = tk.Label(root,image = photoss[current_photo_no],width = 1080,height = 800)
photo_lable.pack()
number_var = tk.StringVar()
#number_var.set('1 of 4')
#此处用来显示当前图片序号和总图片数量
number_var.set(f'{current_photo_no + 1} of {len(photos)}')
tk.Label(root,textvariable = number_var,bd = 1,relief = tk.SUNKEN,anchor = tk.CENTER).pack(fill = tk.X)
#在界面上显示两个按扭,用来操作图片的切换
button_frame = tk.Frame(root)
button_frame.pack()
prev_photo = tk.Button(button_frame,text='上一页')
next_photo = tk.Button(button_frame,text='下一页')
prev_photo.pack(side = tk.LEFT,anchor = tk.CENTER)
next_photo.pack(side = tk.RIGHT,anchor = tk.CENTER)
'''
定义一个函数,用来实现点击按扭切换图片
切换图片实际上是给photoss赋值不同的地址
'''
def change_photos(next_no):
global current_photo_no
current_photo_no += next_no
if current_photo_no >= len(photos):
current_photo_no = 0
if current_photo_no < 0:
current_photo_no = len(photos) - 1
number_var.set(f'{current_photo_no + 1} of {len(photos)}')
photo_lable.configure(image = photoss[current_photo_no])
#此处为两个按扭绑定相应的操作函数
prev_photo.config(command = lambda: change_photos(-1))
next_photo.config(command = lambda: change_photos(1))
root.mainloop()
代码编译成.exe文件和源码,我已上传至个人资源,有需要可以下载。
注意:在exe运行时,需要将图片资源和.exe文件放在同一目录下。