import os
from tkinter import filedialog, Tk
from PIL import Image, ImageTk, ImageSequence
import tkinter
from win32com.shell import shell, shellcon #####################
# 第一个完备的图片浏览器
##################### def 删除文件(filename):
# 删除文件,经过回收站
shell.SHFileOperation((0, shellcon.FO_DELETE, filename, None,
shellcon.FOF_SILENT | shellcon.FOF_ALLOWUNDO | shellcon.FOF_NOCONFIRMATION, None,
None)) # 删除文件到回收站 testpath = r"C:\Users\Administrator\Desktop\测试文件夹" class Application():
def __init__(self, root):
self.root = root
self.img = None
self.createLable() # 建立Lable对象 # self.files = self.载入路径文件列表(testpath)
self.files = self.载入路径文件列表()
# [{name:"",path="",tag=False}]
self.index = 0
self.显示图片() def 显示图片(self):
# 这里开始载入文件
path = self.files[self.index]
self.当前图片 = path
if path[-3:] in {"GIF", "gif"}:
self.显示动图(path)
else:
self.显示单个图片(path) def 显示单个图片(self, path):
# 单图片
image = Image.open(path)
width, height = self.auto_scale(image)
pic_image = image.resize((width, height), Image.ANTIALIAS)
self.img = ImageTk.PhotoImage(image=pic_image)
# self.img 当前图片的文件对象
# 载入文件结束
self.pic_lable['image'] = self.img def 显示动图(self, path):
self.帧列表 = list(map(ImageTk.PhotoImage, ImageSequence.Iterator(Image.open(path))))
self.帧位 = 0
self.帧总数 = len(self.帧列表)
self.动图路径 = path
self.显示帧() def 显示帧(self):
if self.当前图片 != self.动图路径:
return self.pic_lable['image'] = self.帧列表[self.帧位]
self.帧位 = (self.帧位 + 1) % self.帧总数
self.pic_lable.after(100, self.显示帧) def auto_scale(self, pic_image):
"""自动缩放"""
width, height = pic_image.size # 获取图片的width height
org_rate = width / height
if width > height * (1080 / 720):
# 宽缩放
rate = 1
while True:
scale_width = width * rate
if scale_width <= 1080:
break
rate -= 0.1
scale_height = scale_width / org_rate
return int(scale_width), int(scale_height)
else:
# 高缩放
rate = 1
while True:
scale_height = height * rate
if scale_height <= 720:
break
rate -= 0.1
scale_width = scale_height * org_rate
return int(scale_width), int(scale_height) def createLable(self):
self.pic_lable = tkinter.Label(self.root, width=1080, height=720)
self.pic_lable.focus_set()
self.pic_lable['image'] = self.img
self.pic_lable.pack() def 载入路径文件列表(self, path=None):
if not path:
path = filedialog.askdirectory()
self.root.focus_force() # 返回焦点
pic_list = [''.join([path, '/', img]) for img in os.listdir(path)]
return pic_list def prev(self):
self.show_file(-1) def next(self):
self.show_file(1) def show_file(self, n):
self.index += n
if self.index < 0:
self.index = len(self.files) - 1
if self.index > (len(self.files) - 1):
self.index = 0 self.显示图片() def 删除当前图片(self):
文件路径 = self.files[self.index]
删除文件(文件路径)
self.files.pop(self.index)
self.show_file(0)
# self.显示图片() def 滚动处理(event):
if event.delta > 0:
app.prev()
else:
app.next() def 按键(event):
if event.keycode == 37:
app.prev()
elif event.keycode == 39:
app.next()
elif event.keycode == 46:
# 这是删除键的
app.删除当前图片() root = Tk()
root.title('图片浏览器')
root.geometry("1080x720")
root['bg'] = '#333333'
root.resizable(False, False) app = Application(root) root.bind_all("<MouseWheel>", 滚动处理)
root.bind_all("<Key>", 按键)
# 左右的两个按钮1
btnPrev = tkinter.Button(root, text=" < ", command=app.prev)
btnPrev.place(x=-10, y=360)
# type()function None
# 左右的两个按钮2
btnNext = tkinter.Button(root, text=" > ", command=app.next)
btnNext.place(x=1050, y=360) # 左右的两个按钮2
delbtn = tkinter.Button(root, text=" 删除图片 ", command=app.删除当前图片)
delbtn.place(relx=1.0, rely=1.0,anchor=tkinter.SE)
root.mainloop()

[python]tkinter简易的图片浏览器的更多相关文章

  1. 基于Python PIL实现简单图片格式转化器

    基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...

  2. Python爬虫下载美女图片(不同网站不同方法)

    声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...

  3. Python Tkinter基础控件入门实例

    分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...

  4. python搭建简易服务器实例参考

    有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 w ...

  5. 用WPF窗体打造个性化界面的图片浏览器

    原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...

  6. Python编写简易木马程序(转载乌云)

    Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...

  7. 纯JS打造比QQ空间更强大的图片浏览器-支持拖拽、缩放、过滤、缩略图等

    在线演示地址(打开网页后,点击商家图册): http://www.sport7.cn/cc/jiangnan/football5.html 先看一看效果图: 该图片浏览器实现的功能如下: 1. 鼠标滚 ...

  8. iOS开发系列--无限循环的图片浏览器

    --UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件 ...

  9. 一步一步打造自己的Android图片浏览器(原创)

    今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...

  10. Android 图片浏览器 从原来位置放大至全屏显示

    android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...

随机推荐

  1. layedit 清空 编辑器

    使用layedit.setContent(index,"") 即可以清除 layui.use('layedit', function(){ var layedit = layui. ...

  2. js实现一二级域名共享cookie

    前言 最近接手的项目中 ,有人反馈了一个问题,说是在访问网站并登录后,登录成功有登录信息,但是刷新页面后重定向到了登录页面,让从新登录. 打开 goole 调试页面,查看 cookie 时发现存储的相 ...

  3. Vue组件之间的通信方式都有哪些?

    一.组件间通信的概念 我们通常把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件通信指的是发送者通过某种媒体以某种格式来传递信息 ...

  4. 安卓逆向 IDA 静态调试分析

    1.找到我们分析的接口 2.F5进入C伪代码 修正一下参数,IDA无法正常识别 jstring __fastcall Java_com_example_sfs_MainActivity_getText ...

  5. js原型链污染详解

    前言 之前打某湖论剑,两道js的题,给我整懵逼了,发现以前都没对js做过多少研究,趁着被毒打了,先研究一波js原型链,未雨绸缪. 基础 protype 首先我们研究js原型链,得搞明白原型是什么,这里 ...

  6. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)

    1. 安装office包  https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255 2.需要在相应的IIS应用程序池启用 ...

  7. kubernetes之Ingress发布Dashboard(二)

    1.什么是Dashboard Dashboard 是基于网页的 Kubernetes 用户界面. 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错, ...

  8. Docker 安装mysql8

    1.获取镜像 docker pull mysql:8 2.创建数据卷 必须创建数据卷,不然容器挂了数据就丢了 docker volume create mysql-data #创建docker vol ...

  9. oracle to mogdb 迁移---mtk工具

    ## 一.MTK工具介绍--------- MTK–异构数据迁移工具 MTK全称为 Database Migration Toolkit,是一个可以将Oracle/DB2/MySQL/openGaus ...

  10. Office2021简体中文离线安装包下载地址合集,目前最全

    Office2021中文版的离线安装包下载地址合集: 一.专业增强版(强烈推荐):http://officecdn.microsoft.com/pr/492350f6-3a01-4f97-b9c0-c ...