图片查看器-Python-tkinter


在这里插入图片描述


功能分析

功能分析
1 图片浏览
2 图像缩放
3 图像旋转
4 切换浏览
5 拖拽查看

设计思路

设计思路概要
图像处理 PILLOW库实现
UI界面 自带tkinter库来实现
具体功能实现
打开图像
即获取图像路径信息
tkinter的filedialog、os库等
图像显示 tkinter的Label控件
缩放 PILLOW的resize
旋转 PILLOW的rotate
另存为 PILLOW的save
切换浏览 更新路径即可
from tkinter import Tk, Label, Button, Frame, Menu
from tkinter.filedialog import askopenfilename, asksaveasfilename
from os import listdir, mkdir, remove
from os.path import split as path_split
from os.path import exists
from PIL.Image import open as imread
from PIL.ImageTk import PhotoImage
from tkinter.messagebox import showinfo, askyesno
from base64 import b64decode

运行逻辑:


1. 初始界面
  • 完成初始图像信息获取
  • 同步获取该路径下所有可能的图像的信息,供之后切换浏览使用
    初稿

2. 浏览界面
  • 浏览、缩放、切换等基础功能及图标铺排
  • 菜单栏提供:打开、另存为、删除等功能
  • 部分功能加入->鼠标右键菜单
  • 部分功能关联键盘或鼠标
    在这里插入图片描述

代码实现

from tkinter import Tk, Label, Button, Frame, Menu
from tkinter.filedialog import askopenfilename, asksaveasfilename
from os import listdir, mkdir, remove
from os.path import split as path_split
from os.path import exists
from PIL.Image import open as imread
from PIL.ImageTk import PhotoImage
from tkinter.messagebox import showinfo, askyesno
from base64 import b64decode
  • 初始界面

class one():
    def __init__(self):
        self.root = Tk()
        self.root.geometry('900x740+100+40')
        self.root.title('图片查看器')
        self.choose = Button(self.root,
                             text='选择要浏览的图像',
                             font=30,
                             relief='groove',
                             bg='#e6e6e6', bd=8,
                             command=self.openfile_tomwindow,
                             )
        self.choose.pack(expand='yes', anchor='center', )

        self.root.mainloop()

    def openfile_tomwindow(self):
        pass

在这里插入图片描述
按钮的openfile_tomwindow() 回调函数。

  • (塑料英语 open file to main window.打开文件+跳转主窗口)
  • 根据之前分析,还应该完成当前路径下所有图像路径的采集;
  • 而且还要搭建出“图片浏览的器”的使用框架。也就是主界面的搭建。
def openfile_tomwindow(self):
    img_path = askopenfilename(
        title='请选择图片文件',
        # 筛选常见图片文件
        filetypes=[('图片', '.jpg .png .gif .bmp .jpeg')],
        )
    if img_path and img_path.endswith(('.jpg', '.png', '.gif', '.jpeg', '.bmp')):
        self.path = img_path
        self.dir = path_split(self.path)[0]
        self.get_imgs()
        self.choose.destroy()
        self.main_window()

这里打了一个太极。先调用self.get_imgs() 函数获取了路径下的图像,而后再调用self.main_window() 跳转到主窗口。

  • get_imgs() 需要依赖 self.dir 参数。即目标文件路径
# 获取图片路径后,制作图片路径集,存于self.imgs 中
def get_imgs(self):
    # 定义一个小函数,判断是否是图片
    def is_pic(path):
        if path.endswith(('.gif', '.jpg', '.jpeg', '.png', '.bmp')):
            return True
        else:
            return False
    files = [self.dir + f'/{name}' for name in listdir(self.dir)]
    self.imgs = list(filter(is_pic, files))
    self.all_imgs = len(self.imgs)
  • 浏览界面

def main_window(self):
	# 进入主界面之前先准备参数
    self.do_params()
    #----------顶部菜单栏--------
    self.mnu = Menu(self.root)
    filemenu = Menu(self.mnu, tearoff=0)
    self.mnu.add_cascade(label='文件', menu=filemenu)
    filemenu.add_command(label='打开', command=self.openfile)
    filemenu.add_command(label='另存为', command=self.save_im)
    filemenu.add_command(label='删除文件', command=self.del_im)
    othermenu = Menu(self.mnu, tearoff=0)
    self.mnu.add_cascade(label='其它', menu=othermenu)
    othermenu.add_command(label='function1', command=self.function1)
    othermenu.add_command(label='function2', command=self.function2)
    # 放置菜单栏
    self.root.config(menu=self.mnu)
   
    # 设置窗口最小尺寸限制
    self.root.minsize(900, int(self.size[1]*self.upper)+60)
    
    # 调用show函数显示图像
    self.show()

    # 缩放控件布置
    fram1 = Frame(self.root)
    self.bgr = imread(self.pics_path[2])
    self.bgr = PhotoImage(self.bgr)
    bgger = Button(fram1,
                   image=self.bgr,
                   relief='flat',
                   command=lambda: self.chg_size(1))
    bgger.grid(row=0, column=4)
    for i in range(1, 10, 2):
        Button(fram1, width=12, state='disabled', relief='flat').grid(row=0, column=i)
    self.sml = imread(self.pics_path[3])
    self.sml = PhotoImage(self.sml)
    smller = Button(fram1,
                    image=self.sml,
                    relief='flat',
                    command=lambda: self.chg_size(0))
    smller.grid(row=0, column=6)
    
    # 逆时针旋转按键布置
    self.nsz = imread(self.pics_path[4])
    self.nsz = PhotoImage(self.nsz)
    n_rtate = Button(fram1,
                     image=self.nsz,
                     relief='flat',
                     command=lambda: self.rotate_p(0))
    n_rtate.grid(row=0, column=2)
    
    # 顺时针旋转按键布置
    self.ssz = imread(self.pics_path[5])
    self.ssz = PhotoImage(self.ssz)
    s_rtate = Button(fram1,
                     image=self.ssz,
                     relief='flat',
                     command=lambda: self.rotate_p(1))
    s_rtate.grid(row=0, column=8)
    
    # 切换
    # 上一张 按键布置
    self.pre_pic = imread(self.pics_path[6])
    self.pre_pic = PhotoImage(self.pre_pic)
    prev = Button(fram1,
                  image=self.pre_pic,
                  relief='flat',
                  command=lambda: self.turn_page(0))
    prev.grid(row=0, column=0)
    
    # 下一张 按键布置
    self.next_p = imread(self.pics_path[7])
    self.next_p = PhotoImage(self.next_p)
    next = Button(fram1,
                  image=self.next_p,
                  relief='flat',
                  command=lambda: self.turn_page(1))
    next.grid(row=0, column=10)
    fram1.pack(in_=self.root, side='bottom',)
几点说明
do_parmas()函数 做一些数据准备:原图像尺寸的等参数获取、转换为tkinter可用对象等
show() 完成图像显示以及顺手进行一波按键绑定
Button控件 image参数。可理解为按键的图标(事先准备好的)
command参数/属性。回调函数-根据相应的按键对图像状态更新并显示。

选择一张图后,便可以进入如下的浏览界面。
在这里插入图片描述
PS: 关于图标部分。事先P好的文件。当然得做一些处理才能用【详见完整代码】
在这里插入图片描述


  • 各小功能具体实现

  到这里,已经完成了框架的搭建。接下来要做的就是,在各个部件上加入所需要的功能函数/编写回调函数。以及细节优化。

from tkinter import Tk, Label, Button, Frame, Menu
from tkinter.filedialog import askopenfilename, asksaveasfilename
from os import listdir, mkdir, remove
from os.path import split as path_split
from os.path import exists
from PIL.Image import open as imread
from PIL.ImageTk import PhotoImage
from tkinter.messagebox import showinfo, askyesno
from base64 import b64decode
  1. do_params()【获取初始数据】
# 根据self.path 来更新当前图像参数
# 更换图像、打开图像时需要用到
def do_params(self):
    self.source_img = imread(self.path)
    self.size = self.source_img.size
    # 用来判断 刷新显示前 是否改变了图像大小
    self.change_size = True
    # 图片相对于源图的缩放比例
    self.upper = 440/self.size[1]
    if (self.size[0] * self.upper) > 800:
        self.upper = 800/self.size[0]
    new_size = (int(self.size[0] * self.upper), int(self.size[1] * self.upper))
    self.img = self.source_img.resize(new_size)
    self.im = PhotoImage(self.img)
  1. show() 函数【按键绑定与图像显示】
    # 需要依赖 self.im
    def show(self, mouse_move=None):
        # 更改界面标题为图像路径
        self.root.title(f'{self.path}{self.size[0]}x{self.size[1]}】')
        self.lab = Label(self.root, bg='#BCBCBC')
        self.lab['image'] = self.im
        # 绑定鼠标滚轮,通过函数 mousewhl 来获取滚动状态(向前/向后)并判断缩放
        self.lab.bind('<MouseWheel>', self.mousewhl)
        # 键盘左右键绑定翻页
        self.lab.bind('<Left>', lambda event: self.turn_page(0))
        self.lab.bind('<Right>', lambda ev: self.turn_page(1))
        self.lab.focus_set()
        # 鼠标右键菜单栏
        self.lab.bind('<Button-3>', self.mouse_mnu)
        # self.lab.bind('<Button-2>', self.smaller)
        # 鼠标拖动 按下左键拖动
        #self.lab.bind('<B1-Motion>', self.pt)

        # 通过按下鼠标左键并拖动来更新图像位置【拖动图像】
        # 目前还没找到实现接口 {self.lab 当前(初始)放置坐标(左上角 x,y ) }
        if mouse_move:
            self.lab.place(x=mouse_move[0],
                           y=mouse_move[1])
        else:
            self.lab.pack(anchor='center', expand='yes', fill='both')#,fill='both'
  1. 翻页、旋转、缩放
# 翻页
def turn_page(self, norp):
    # next or previous
    index = self.imgs.index(self.path)
    # 默认下一张
    new_index = (index + 1) % self.all_imgs
    if not norp:
        if not index:
            new_index = self.all_imgs - 1
        else:
            new_index = (index - 1) % self.all_imgs
    self.path = self.imgs[new_index]
    self.source_img.close()
    self.img.close()
    self.do_params()
    self.lab.destroy()
    self.show()
    
# 旋转
def rotate_p(self, direction):
    angle = 90
    # direction = 1:顺时针;否则逆时针
    if direction:
        angle = -90
    self.source_img = self.source_img.rotate(angle, expand=True)
    self.size = self.source_img.size
    self.img = self.img.rotate(angle, expand=True)
    self.im = PhotoImage(self.img)
    self.lab.destroy()
    self.show()


# 图像尺寸改变
# 需要改变、保留 self.img--旋转时需要用到
def chg_size(self, bors):
    # bigger or smaller
    if_chg = 0
    if (self.upper > .1) and (not bors):
        if_chg = 1
        self.upper -= .1
    elif (self.upper < 8) and bors:
        if_chg = 1
        self.upper += .15
    if if_chg:
        new_size = (int(self.size[0]*self.upper), int(self.size[1]*self.upper))
        self.img = self.source_img.resize(new_size)
        self.im = PhotoImage(self.img)
        self.lab.destroy()
        self.show()
  1. 鼠标右键菜单栏
# 鼠标右键菜单栏
def mouse_mnu(self, event):
    self.mmnu = Menu(self.root, tearoff=0)
    otherf = Menu(self.mmnu, tearoff=0)
    self.mmnu.add_command(label='打开', command=self.openfile)
    self.mmnu.add_command(label='另存为', command=self.save_im)
    self.mmnu.add_command(label='删除文件', command=self.del_im)
    self.mmnu.add_cascade(label='其它操作', menu=otherf)
    otherf.add_command(label='function1', command=self.function1)
    otherf.add_command(label='function2', command=self.function2)
    self.mmnu.post(x=event.x_root, y=event.y_root)
  1. 打开、删除
# 从菜单打开图片 的回调函数
def openfile(self):
    img_path = askopenfilename(
        title='请选择图片文件',
        # 筛选常见图片文件
        filetypes=[('图片', '.jpg .png .gif .bmp .jpeg')],
    )
    if img_path and img_path.endswith(('.jpg', '.png', '.gif', '.jpeg', '.bmp')):
        self.path = img_path
        self.dir = path_split(self.path)[0]
        self.get_imgs()
        self.lab.destroy()
        self.do_params()
        self.show()

# 删除图像
def del_im(self):
    if askyesno('确认', '是否彻底删除该图片?'):
        out_path = self.path
        self.turn_page(1)
        self.imgs.pop(self.imgs.index(out_path))
        self.all_imgs -= 1
        remove(out_path)
        showinfo('完毕', '图片已彻底删除')

完整的初始化函数:

  • 这里为了打包事先把图标文件转换为2进制形式存于代码中,代码运行的时候,会先判断图标文件是否存在,若是不存在,将会将代码中的二进制图标写入内存中以供使用。【图标数据如下】
bgr_gif = "R0lGODlhMgAyAJEAAAAAAP///1paWv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAADACwAAAAAMgAyAAACyJyPqcvtD6Nsoto7s7q8Cz15Igc+42mVDMp+KnJu42uIkK16mQ7yspvwhUgLYtAo6ayQMKbJWYMOlMPUEnOtVK1F6o/7xB5xY7CD2TJLv8BpGrwut99wcVh7oOOjZopdP2d39kcnl+TEwtY2KNgk5XXTyPco6Scp5NjHqOlWCRnxObmXOXoIdRkKmmpZqbpKGncX+pYDmFhie9uTG1Ob1tn7EixKRuM6bCxbnLw5wxyJ8gyNLK2IWS23jA37uh29zRoLfg3eBVYAADs="
fst_gif = "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"
nsz_gif = "R0lGODlhMgAyAOYAAAAAAP///ygoKSUlJiwsLTg4OTQ0NURERUFBQhERECMjIioqKTg4N1NTU1JSUktLS0lJSUhISEdHR0ZGRkVFRUREREJCQkFBQUBAQD8/Pz4+Pj09PTs7Ozo6Ojk5OTg4ODc3NzY2NjU1NTQ0NDMzMzIyMjExMTAwMC8vLy4uLi0tLSwsLCsrKyoqKikpKSgoKCcnJyYmJiUlJSQkJCMjIyIiIiEhISAgIB8fHx4eHh0dHRwcHBsbGxoaGhkZGRgYGBcXFxYWFhUVFRQUFBMTExISEhERERAQEA4ODg0NDQkJCQUFBf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAABMACwAAAAAMgAyAAAH/4BMgoOEhYQaIicuNDQyKyYlGYaTlJWGITE5Pjw6NjIzMzc6Ojw7Lh2WqZYLPT44NKCxsqA0OD88K6q6gi4/OrPAwJ88Qie7Oh+TGUM+n8HPsp9AQROprkM2hTZFNc7Q36AyNkQvluE7QByCP83g7rNBOJUiNjPiQCc0PDHv/aAxPnxQAnEjlgweOPj58xejB5FJ9BaKy6HjRo0atXbk6PYtRhAahiK+k7Hjh4wUDAp9SIEDyA1vwGIYEVFIZMcbQ1ogSKUhRxB70JDUrAfuxgsIu5h8GIIDpsEeNwjZhPYDQ1JBD4ToUDgrxhGkgkYQ/VYrxFVBQ3I4BYVDxyCx7v9k0AgS9ayRGsFkDKEgiMRYcAd/HLiaIQFXWTpcCCrxF1yMG0pGXJXRIxgNgUxM4H2XA0jFs0yMPANigcmJzdB0BOHhwipoJi12BNthDAXqWTXYubjwmlCFn8BwlEtxO9SOHTVQ9TbUAxbubCs23/jRA4aJ5ZVmNJ5BIweTGDp+/JihHHulF9tDeWAiI5l5VSpyBLNh9v2u+PNp2tflomDw8vtZEsN23QWoyw7OyVJDNgZaMgFwswjXoCUsyAYMD9dNSEkRz/wgiYaGwNDDWjP0kEoEPwjxngVHHBZLDjBYogIRCmxiHjd5FSEBJRCw80kMRLSwHBBqBXPDDpScIITQJ7HEIIQMrwWxVTAy8WVIDkIAJUsMQCCZ1AfxDJAXD3UVIsESLzyTiRAqqLJBDUI0Ak0SldQAhIsGzcCDDzAYAEIhBZhgww9NQRNDEZJVcoQOJMpyAw852MBIRsg5RqgqSbz0zqQJOtaDEbo4kEShC7nT0A9JNVDEDniWGg0QJp7VmZauGlQDETG+1oJWjY7UQxAbmEcDkb3mNcMOQghpXwcx3JLeLDTc4EMPyjZYwgya9PBKLDbgwEMPPMhQH4iCYBACCzBwN4MABIigQW+BAAA7"
nxt_gif = "R0lGODlhMgAyANUAAAAAAP///2BfYF5dXl1cXVxbXFNTVFtbXFdXWFVVVl1eXlpbW1hZWVdYWF9fXl5eXV1dXFxcW1tbWlpaWV9eXl5dXV1cXGRkZGNjY2JiYmFhYWBgYF9fX15eXl1dXVxcXFtbW1paWllZWVhYWFdXV1ZWVlVVVVRUVFNTU1FRUVBQUExMTEtLS0pKSv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAAuACwAAAAAMgAyAAAG/0CXcEgsGociS6eDODqfUCgHJBqJPJ+odmv8fEJgsAfELUdRnHBYVMma30UQSL1+MOB4F50+6Yzyb3N7ah0igGVfg4QNh1spGiKKYX6NWiAekmEcCZVRF1SZIR0GnVKYmSAOpVAZH5GSIB2rTxyJsBwos0cYgre6RiwZvYqXv0UkGqEhH7LGQy3JoR8ezkMnw4pjToUkIyTf4OHiJeTkIiQoyiFJzUMLrnIgXvP09fbTtsoWB9Zp6v8Ar4QQ4g+gQWUiKCQo0eGgw1BzRGB7SLGiRUkSSZy6aJEMJI4URVAy8RHkwWlDPGwIIS+ey5cwXX6YCOtBEROYROjcybOnz31IIkr8AyGgmoqNsCJUc9GBJh0OS7Eoo1Ztg6tQHExUuzT1jzNmryRxMPQVabYS1QooCDtIJFljBAqFekCiWh+2e67wqxpKBAQJS71kEvFhwFIXTsEQdrN0MMrDLma2nQlZCImxe0BArSzEKp0I7Tiv0JCTcGjOQlh6qZsnCAA7"
pre_gif = "R0lGODlhMgAyANUAAAAAAP///2BfYF5dXl1cXVxbXFNTVFtbXFdXWFVVVl1eXlpbW1hZWVdYWF9fXl5eXV1dXFxcW1tbWlpaWV9eXl5dXV1cXGRkZGNjY2JiYmFhYWBgYF9fX15eXl1dXVxcXFtbW1paWllZWVhYWFdXV1ZWVlVVVVRUVFNTU1FRUVBQUExMTEtLS0pKSv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAAuACwAAAAAMgAyAAAG/0CXcEgsGkmfDyhkbDqfUGLnIxKFPJpVdMstdiKhcPiz6ZqjnKU4LOKQzvAiiLoWz+N4D72+xsOTVnx2fmYDe4IhSYRcEhCBiCFli1EHHo+CIh0Tk1AkD5BsHQScT5mXfCIKBaROJR6gYXqsTW2wmR+zRiOvsB4guUUmHLZkwEW8oB8exkTDsCAdzEMRaqAeKtIuAtWwJVZV4OHi41VXJkUP3M9KIO3u7/DxSpHLQnqw+PmYGucjHaf6AoISocGFOoEIIXkgAQJgwocQI+JrGOKgxIQdSiSg4PBiQA5CrnT0CIvDiSEHLARUlqSly5cw2TX8sMCLhZFrUJAQUaJnT4MSQIMKHTpiZ7QmIJBBAnEym4t7sDS0cOpiCj4Nb5z6epaBBdU0zzBQRQE2GUiqHSyKEfEhA1UXDtSK8XA2m4EOtkBcoJrAmbVfTv3Z0pCCagO8sHBRzfTsrQt/E0A5dsHggcN2k118qACQA4rMBpUmUgxamYgRIkDUBe0CQYcONzkFAQA7"
sml_gif = "R0lGODlhMgAyAJEAAAAAAP///1paWv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAADACwAAAAAMgAyAAACvZyPqcvtD6Nsoto7s7q8Cz15Igc+42mVDMp+KnJu42uIkK16mQ7ye9cjlYA/zIsoQQ6FSSONeYPmpBRqzZdQOqitStZpAg+6Xpi4mjqQ01d22L0ut+Vv+nhtdm/F+LwdrTeHJegSdRZ0uJJY9Le3GKFV1xhi5RjY9KhYaXlpmPm16fkZM4Xjh1Iah7qkuorYOpPKcucqK9VCwxibCznL21v7C7grPGxarEmKnEy8DNrsfBoZrXZMLRN6TUtXAAA7"
ssz_gif = "R0lGODlhMgAyAOYAAAAAAP///ygoKSUlJiwsLTg4OTQ0NURERUFBQhERECMjIioqKTg4N1NTU1JSUktLS0lJSUhISEdHR0ZGRkVFRUREREJCQkFBQUBAQD8/Pz4+Pj09PTs7Ozo6Ojk5OTg4ODc3NzY2NjU1NTQ0NDMzMzIyMjExMTAwMC8vLy4uLi0tLSwsLCsrKyoqKikpKSgoKCcnJyYmJiUlJSQkJCMjIyIiIiEhISAgIB8fHx4eHh0dHRwcHBsbGxoaGhkZGRgYGBcXFxYWFhUVFRQUFBMTExISEhERERAQEA4ODg0NDQkJCQUFBf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAABMACwAAAAAMgAyAAAH/4BMgoOEhYUZJSYrMjQ0LiciGoaTlJWGHS47PDo6NzMzMjY6PD45MSGWqZYrPD84NJ+xsp80OD49C6q6gidCPKCzwcE6Py67lRNBQMDCzbIyPkMZkx86qS9ENjLO3M81RTaFNkO2lThB3emz0D+CHEA72zOUPj4x6vifMTw0J0DaM2yImESkx718+WLg4CFvxg0QhmgEOdhMRo0cO17VqHFDRw6A+QQWEmGEYjAZN4DgSPGhEIMUMn7EwyeSEBJn24LkkGQJQYshN0w2qynoRo+Gz3AMabkLwgtP3YhCOCJUnw4hD44JwvAjHVEdOITJyDFEq6AQr7yOEERhCNJYNf+MmGVyIwiNt8JsrGXiQoewGAmmHTvwgyFNEoJ8wAp2VOsIJUFDlmBiYZkwuWY7AsmBr4YJJid2CNvRYu5WFzyC+OVW4wSTF2GDBalgmtAFFz5+1GhWAwUTG7tn0ehRe1KHGjt2QIWbgkmOxbJszCtOyQSMHj+g1ljhYXn0F9RTdZjx44eOU9KD5VARXtcHGUxEpJ+1vv2xDrFn3TBmf9fzYDbE0N8uwAVDww4D6gKbMEFMkGAqJvwSzA4sPGhJBl0JU4SFlvQgVg8wcEgJDJwFE8MRFrQnxA8RpCJBEXjN8E14pChABHuWKCdWDkAU1wIR97ADQSUUlPSXDkGYJoPGEBSFIoRrlNxgWDADnMPULjsAIdQ2QuRQSRI40SBEDRuookKXVX3ywhISUDJCEWl+IgMOP9hgQgGFgGAADD78EuMMMQBRgyV0xglXcq80YkMOPHgnlg5HqGKEQfg00og6KCWxyw+UIpTOnEk4cEwPQPzpqT47FNGAWTAQUYOp+GyzWW0bBHHUqbHIcFVp1LUghGiwnsQjDQO20IMPN0DnjA2txNCBhSHIwEMPPOAwXy3HcjaZiINoIAIBAswACwwshICBaYEAADs="
tul_ico = "AAABAAEASEgAAAEAIACIVAAAFgAAACgAAABIAAAAkAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AxYDAwMWAwMDFRgYGKgoKCj/HBwc/yIiIv8jIyP7BQUFJgAAAAAAAAAAFRUVkicnJ/8kJCT/Jycn/xMTE4kJCQlDJiYm/yEhIf8fHx//JiYm/yMjI/ciIiLvIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi8CIiIvAiIiLwIiIi7yIiIvolJSX/HR0d/yIiIv8kJCT+BQUFKAAAAAAAAAAAFRUVkicnJ/8kJCT/Jycn/xMTE4kICAg4JiYm/yQkJP8cHBz/ISEh/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8gICD/Hh4e/yUlJf8jIyP3AwMDGgAAAAAAAAAAFRUVkicnJ/8kJCT/Jycn/xMTE4kBAQEHHBwcxigoKP8jIyP/Hx8f/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x4eHv8fHx//IyMj/ygoKP8WFhagAAAAAAAA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AAAJCQlDJiYm/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ygoKP8iIiLpCAgIOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwsLTRQUFIkTExOHExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMThhMTE4YTExOGExMTiBEREXQEBAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAADAAAAAAAAAAf8AAACAAAAAAAAAAP8AAAAAAAAAAAAAAP8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH8AAAAD4H8AAAADx///4H8AAAADg///4H8AAAADgf//4H8AAAADgP//4H8AAAADgH//4H8AAAADwD//4GAAAAAD4B//4GAAAAAD8A/8H///4GAAAAAD+Af4D///4GAAAAAD/APwD///4GAAAAAD/gHgB///4GAAAAAD/wDAA///4GAAAAAD/4AAAf//4GAAAAAD/8AAgP//4GAAAAAD/+ABgP//4GAAAAAD//ADwH/8IGAAAAAD//gH4D/4AGAAAAAD//wP8B/wAGAAAAAD//4f+A/gAGAAAAAD/h//+AfAIGAAAAAD+Af//AeAYGAAAAAD8AP//gMA4GAAAAAD4AH//wAB4GAAAAAD4AH//4AD4GAAAAADwAH//8AP4GAAAAADwMH//8Af4GAAAAADwAH//+A/4GAAAAAD4AH///B/4GAAAAAD4AH///j/4GAAAAAD8AP/4GAAAAAD+Af/4GAAAAAD/h//4GAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAOAAAACAAAAAAAAAAOAAAADAAAAAAAAAAeAAAAD//+AAAAD/+AAAAAAAAAAAAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAEAAAD/+AAAAAAAAAMAAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAD///8AAAA="

    # 初始化参数
    # 获取需要展示的图片路径并判断是否合法
    # 合法则获取目标路径,并提取图片列表-->刷新到显示界面
    def __init__(self):
        pics = [tul_ico, fst_gif, bgr_gif, sml_gif, nsz_gif, ssz_gif, pre_gif, nxt_gif]
        self.pics_path = ['pics' + f'/{name}'
                     for name in ['tul.ico', 'fst.gif', 'bgr.gif',
                                  'sml.gif', 'nsz.gif', 'ssz.gif', 'pre.gif', 'nxt.gif']
                     ]
        if not exists('pics'):
            mkdir('pics')
        for i in range(len(self.pics_path)):
            if exists(self.pics_path[i]):
                continue
            else:
                with open(self.pics_path[i], 'wb') as f:
                    f.write(b64decode(pics[i]))
                    f.close()
        self.path = None
        self.dir = None
        # 图片地址集合
        self.imgs = None
        # 当前文件夹内总图数
        self.all_imgs = 0
        # 源图
        self.source_img = None
        # 是否改变图像大小标志
        self.change_size = None
        # 当前源图尺寸(可能有旋转
        self.size = None
        # 当前图片缩放比例
        self.upper = None

        self.root = Tk()
        self.root.iconbitmap(self.pics_path[0])
        self.root.geometry('900x740+100+40')
        self.root.title('图片查看器')
        fst = imread(self.pics_path[1])
        self.fst = PhotoImage(fst)
        self.choose = Button(self.root,
                             image=self.fst,
                             relief='groove',
                             bg='#e6e6e6', bd=8,
                             command=self.openfile_tomwindow,
                             )
        self.choose.pack(expand='yes', anchor='center', )

        self.root.mainloop()

在这里插入图片描述

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的壳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值