我们要实现的是一个很简单的小玩意,文件夹中存放图片,每次都是点击然后才能实现。
上一个博客 实现的拆分gif,最后的图查看不是按照文件名的顺序 排列查看的,这个时候我们就要自己手动来生成一个图片的查看器,通过图片的名称顺序 来进行查看图片。
制作以上 文件夹中的图片查看器
模块介绍
-
Tkinter:
Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。 -
messagebox
形成对话框,相当于前端的 button
- 导入对应的模块
- 构造 展示图片的窗口 并设置对应配置
- 找到 想要查看的图片的文件夹
- 将文件夹中的图片,过滤筛选
import os
import tkinter
import tkinter.messagebox
from PIL import Image, ImageTk
# 创建tkinter应用程序窗口
root = tkinter.Tk()
# 设置窗口的大小和位置
root.geometry('430x650+40+30')
# 不允许改变窗口的大小
root.resizable(False, False)
# 设置窗口主题
root.title('使用Label显示图片')
# 获取当前文件夹中所有图片文件列表
suffix = ('.jpg', '.bmp', '.png')
# 通过listdir 来查看文件夹中的文件,并遍历
pics = [p for p in os.listdir('test') if p.endswith(suffix)] # 判断是不是我们要的图片类型 结尾
pics.sort(key=lambda item: int(item[:item.index('.')])) # 过滤遍历后的图片,以参数排序
# item[:item.index('.')] 切片 过滤.以后
# index 返回游标在参数中指定的项目中的整数位置。
- 先 生成一个函数,传参数 flag,表示当前的张数
- 构建 上一张 下一张的的按钮,当前页的参数
- 使用 tkinter.lable构建 呈现工具的一个图像
current = 0 # 初始位置参数,放便于累加
def changePic(flag):
pass
# 上一张的按钮
def btnPreClick():
changePic(-1)
btnPre = tkinter.Button(root, text='上一张', command=btnPreClick) # 构建按钮,文字显示,点击传入指令
btnPre.place(x=100, y=20, width=80, height=30) # place构造按钮的属性
# 下一张按钮
def btnNextClick():
changePic(1)
btnNext = tkinter.Button(root, text='下一张', command=btnNextClick)
btnNext.place(x=230, y=20, width=80, height=30)
# 用来显示图片的Label组件
lbPic = tkinter.Label(root, text='test', width=400, height=600) # 构建展示图像的框架
changePic(0) # 对这个函数 传当前图片的位置
lbPic.place(x=10, y=50, width=400, height=600) # 构建大框架的属性
- 函数收到位置参数做判断,避免出现超出点击
- 打开 图像,并设置 宽高值
- 将打开的图像 设置Label组件图片
current = 0 # 初始位置参数,放便于累加
def changePic(flag):
'''flag参数作为上下图片的调节 -1代表上一张 1代表下一个'''
global current
new = current + flag
if new < 0:
tkinter.messagebox.showerror('', '这已经是第一张图片了')
elif new >= len(pics):
tkinter.messagebox.showerror('', '这已经是最后一张图片了')
else:
# 获取要切换图片文件名
pic = pics[new]
# 创建Image对象并进行缩放
im = Image.open('test/{}'.format(pic))
w, h = im.size
# 这里假设用来显示图片的Label组件尺寸为 400x600
if w > 400:
h = int(h * 400 / w)
w = 400
if h > 600:
w = int(w * 600 / h)
h = 600
im = im.resize((w, h))
# 创建image对象,并设置Label组件图片
im1 = ImageTk.PhotoImage(im)
lbPic['image'] = im1
lbPic.image = im1
current = new
最后全部代码
import os
import tkinter
import tkinter.messagebox
from PIL import Image, ImageTk
# 创建tkinter应用程序窗口
root = tkinter.Tk()
# 设置窗口的大小和位置
root.geometry('430x650+40+30')
# 不允许改变窗口的大小
root.resizable(False, False)
# 设置窗口主题
root.title('使用Label显示图片')
# 获取当前文件夹中所有图片文件列表
suffix = ('.jpg', '.bmp', '.png')
pics = [p for p in os.listdir('test') if p.endswith(suffix)]
pics.sort(key=lambda item: int(item[:item.index('.')]))
current = 0
def changePic(flag):
'''flag参数作为上下图片的调节 -1代表上一张 1代表下一个'''
global current
new = current + flag
if new < 0:
tkinter.messagebox.showerror('', '这已经是第一张图片了')
elif new >= len(pics):
tkinter.messagebox.showerror('', '这已经是最后一张图片了')
else:
# 获取要切换图片文件名
pic = pics[new]
# 创建Image对象并进行缩放
im = Image.open('test/{}'.format(pic))
w, h = im.size
# 这里假设用来显示图片的Label组件尺寸为 400x600
if w > 400:
h = int(h * 400 / w)
w = 400
if h > 600:
w = int(w * 600 / h)
h = 600
im = im.resize((w, h))
# 创建image对象,并设置Label组件图片
im1 = ImageTk.PhotoImage(im)
lbPic['image'] = im1
lbPic.image = im1
current = new
# 上一张的按钮
def btnPreClick():
changePic(-1)
btnPre = tkinter.Button(root, text='上一张', command=btnPreClick)
btnPre.place(x=100, y=20, width=80, height=30)
# 下一张按钮
def btnNextClick():
changePic(1)
btnNext = tkinter.Button(root, text='下一张', command=btnNextClick)
btnNext.place(x=230, y=20, width=80, height=30)
# 用来显示图片的Label组件
lbPic = tkinter.Label(root, text='test', width=400, height=600)
changePic(0)
lbPic.place(x=10, y=50, width=400, height=600)
# 启动
root.mainloop()
最后的效果展示