[python]tkinter简易的图片浏览器
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简易的图片浏览器的更多相关文章
- 基于Python PIL实现简单图片格式转化器
基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...
- Python爬虫下载美女图片(不同网站不同方法)
声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...
- Python Tkinter基础控件入门实例
分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...
- python搭建简易服务器实例参考
有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 w ...
- 用WPF窗体打造个性化界面的图片浏览器
原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...
- Python编写简易木马程序(转载乌云)
Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...
- 纯JS打造比QQ空间更强大的图片浏览器-支持拖拽、缩放、过滤、缩略图等
在线演示地址(打开网页后,点击商家图册): http://www.sport7.cn/cc/jiangnan/football5.html 先看一看效果图: 该图片浏览器实现的功能如下: 1. 鼠标滚 ...
- iOS开发系列--无限循环的图片浏览器
--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件 ...
- 一步一步打造自己的Android图片浏览器(原创)
今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...
- Android 图片浏览器 从原来位置放大至全屏显示
android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...
随机推荐
- Rust Rand生成随机数
# in project file cargo add rand extern crate rand; use rand::Rng; fn main() { let mut rng = rand::t ...
- 计算机网络基础06-Email应用
1 构成组件 邮件客户端 邮件服务器 SMTP协议 Simple Mail Transfer Protocol 1.1 邮件客户端 读写Email消息 和服务器交互,收发消息 1.2 邮件服务器 邮箱 ...
- Python关键字 asynico
同步和异步 同步和异步是指程序的执行方式.在同步执行中,程序会按顺序一个接一个地执行任务,直到当前任务完成.而在异步执行中,程序会在等待当前任务完成的同时,执行其他任务. 同步执行意味着程序会阻塞,等 ...
- Python学习常见问题及其解决方案(1)
1.ModuleNotFoundError: No module named 'urllib2' 解决方案: 1)https://blog.csdn.net/weixin_45598506/artic ...
- .net NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
1.问题由来 在做一个导入的需求时,测试导入模板,无论导入模板里的日期设置成何种日期格式到代码中都会提示有不正确的格式化数据,加断点调试发现,导入的日期如:Excel表格中是2022/5/26,断点看 ...
- day13-自定义拦截器
自定义拦截器 1.什么是拦截器 说明: 拦截器与过滤器的区别 SpringMVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求 ...
- 给力的Zstack云主机
合肥光源储存环纵向震荡可视化展示初步结果 前两天做好上面的可视化展示后,想着顺道把那个时间的二维图分析结果给出来吧,就又把纵向震荡的每个束团的频谱和相位顺道可视化显示出来,给计算这些结果的云主机又加点 ...
- JZOJ 1040. 【GDOI2007】夏娜的菠萝包
状压玩疯了 \(Code\) #include<cstdio> #include<iostream> #include<cstring> using namespa ...
- 基于电商直播SDK快速实现一个淘宝直播APP【内附源码】
现在各大互联网APP都标配电商直播带货了,没有直播带货开发经验都感觉自己跟不上技术的进步.今天快速基于Java实现一个安卓端电商直播APP,深入理解整个电商直播开发流程.我们最终实现效果如下: 按照惯 ...
- leaflet动态加载/手动绘制(圆、多边形)demo
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3 ...