python 实现基本的图像查看器 -pillow

我们要实现的是一个很简单的小玩意,文件夹中存放图片,每次都是点击然后才能实现。

上一个博客 实现的拆分gif,最后的图查看不是按照文件名的顺序 排列查看的,这个时候我们就要自己手动来生成一个图片的查看器,通过图片的名称顺序 来进行查看图片。

在这里插入图片描述
在这里插入图片描述
制作以上 文件夹中的图片查看器

模块介绍

  • Tkinter:
    Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

  • messagebox
    形成对话框,相当于前端的 button

  1. 导入对应的模块
  2. 构造 展示图片的窗口 并设置对应配置
  3. 找到 想要查看的图片的文件夹
  4. 将文件夹中的图片,过滤筛选
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 返回游标在参数中指定的项目中的整数位置。
  1. 先 生成一个函数,传参数 flag,表示当前的张数
  2. 构建 上一张 下一张的的按钮,当前页的参数
  3. 使用 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)                 # 构建大框架的属性

  1. 函数收到位置参数做判断,避免出现超出点击
  2. 打开 图像,并设置 宽高值
  3. 将打开的图像 设置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()

最后的效果展示

在这里插入图片描述

发布了91 篇原创文章 · 获赞 174 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/104885316