欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3打造专属的压缩软件

程序员文章站 2022-04-25 20:22:29
...

python3可以利用其自带的GUI库打造许多有用的应用软件,本文将使用python3的tkinter库来打造自己专属的压缩小软件。
本文的成品图片:
python3打造专属的压缩软件
首先导入相关的模块:

import os
import zipfile
import tkinter.filedialog
from tkinter import *
from tkinter import scrolledtext

接着再设置相关的变量:

# 设置全局变量
data = ()
li_list = ["选择文件" , "压缩文件" , "解压文件"]

编写选择文件的函数:

# 选取文件的操作
def get_xuan():
    global data
    # 使用文件对话框选择文件
    # filedialog.askopenfilenames可以返回多个文件名
    data = tkinter.filedialog.askopenfilenames(title = "选择文件")
    # print(type(data),data)
    tmp = []
    for i in data:
        tmp.append(i)
    # print(tmp , type(tmp))
    # exit()
    qian = "选择的文件有:" + "\n"
    # 返回通过指定字符连接序列中元素后生成的新字符串。
    file_xian =  qian + '\n'.join(tmp) + "\n"
    # print(file_xian , type(file_xian))
    scr.delete(0.0 , END)
    scr.insert(END ,file_xian )

编写压缩文件的函数:

# 压缩文件的操作
def get_ya():
    global data
    if v.get() == 1:
        # 获取压缩文件的路径
        ya_name = tkinter.filedialog.asksaveasfilename(title='保存文件', filetypes=(('zip 文件', '*.zip'), ('所有文件', '*.*')))
        # 创建压缩文件
        ya_wen = zipfile.ZipFile(ya_name + '.zip', 'a')  # 压缩文件默认zip格式
    elif v.get() == 2:
        # 获取压缩文件的路径
        ya_name = tkinter.filedialog.asksaveasfilename(title='保存文件', filetypes=(('rar 文件', '*.rar'), ('所有文件', '*.*')))
        # 创建压缩文件
        ya_wen = zipfile.ZipFile(ya_name + '.rar', 'a')  # 压缩文件默认rar格式
    elif v.get() == 3:
        # 获取压缩文件的路径
        xuan_name = str(entry.get()) + ' 文件'
        kuo = "*." + str(entry.get())
        ya_name = tkinter.filedialog.asksaveasfilename(title='保存文件', filetypes=((xuan_name, kuo), ('所有文件', '*.*')))
        # 创建压缩文件
        ya_wen = zipfile.ZipFile(ya_name + '.' + str(entry.get()), 'a')  # 压缩文件默认rar格式
    # 将数据导入刚创建的压缩文件中
    for i in data:
        # write(文件数据 , 文件名)
        # os.path.basename 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。
        ya_wen.write( i , os.path.basename(i))
    # 写入完就关闭操作
    ya_wen.close()
    wen =  "\n" + "文件压缩完成" + "\n"
    scr.insert(END, wen)

编写解压文件的函数:

# 解压文件的操作
def get_jie():
    # 选择目标文件 ,tkinter.filedialog.askopenfilenames 选择打开多个文件,以元组形式返回多个文件名
    jie_name = tkinter.filedialog.askopenfilenames(title = "选择压缩文件")
    # 储存容器
    tmp = []
    for i in jie_name:
        tmp.append(i)
    qian = "选择的文件有:" + "\n"
    # 返回通过指定字符连接序列中元素后生成的新字符串。
    file_jie = '\n'.join(tmp)
    # print(file_jie)

    # 选择目标文件后进行读取
    file_read = zipfile.ZipFile(file_jie , "r")
    # print(file_read)

    # 选择解压后的路径
    file_lu = tkinter.filedialog.askdirectory(title = "选择解压的目录")

    # 将文件放入解压目录中
    file_read.extractall(file_lu)

    # 关闭进程
    file_read.close()

    wen =  "\n" + "文件解压完成" + "\n"
    scr.insert(END, wen)

最后编写相关的GUI界面模块:

# 创建住窗口
window = Tk()
# 调节窗口的大小和位置
window.geometry('720x490+360+100')
# GUI界面的名字
window.title('博主的压缩软件')
# GUI界面的背景颜色
window['bg'] = '#303030'


button1 = Button(window,text = li_list[0],font=("隶书",25),bg = 'Snow',activeforeground = 'gold',activebackground = 'green' ,command = get_xuan)
button1.place(x=40 , y=100)

button2 = Button(window,text = li_list[1],font=("隶书",25),bg = 'Snow',activeforeground = 'gold',activebackground = 'green' ,command = get_ya)
button2.place(x=270 , y=100)

button3 = Button(window,text = li_list[2],font=("隶书",25),bg = 'Snow',activeforeground = 'gold',activebackground = 'green' ,command = get_jie)
button3.place(x=500 , y=100)


v = IntVar()
v.set(1)
button4 = tkinter.Radiobutton(window, text='压缩格式为: zip', font=("隶书", 20), bg='white', variable=v,
                              activeforeground='gold', activebackground='green', value=1 )
button4.place(x=40, y=5)

button5 = tkinter.Radiobutton(window , text='压缩格式为: rar', font=("隶书", 20), bg='white', variable=v,
                              activeforeground='gold', activebackground='green', value=2 )
button5.place(x=40, y=50)

button6 = tkinter.Radiobutton(window , text='其他压缩格式为:', font=("隶书", 20), bg='white', variable=v,
                              activeforeground='gold', activebackground='green', value=3 )
button6.place(x=380, y=8)

entry = Entry(window, font=('微软雅黑', 20), width=15)
entry.place(x=380, y=50)

scr = scrolledtext.ScrolledText(window, font=('微软雅黑', 15), width=57, height=12 , fg = "blue")
scr.place(x=10, y=170)

scr.insert(END , "准备就绪")

# 循环显示
window.mainloop()

本文代码较多,相关函数的注释在文中已有注释(博主较懒),有不懂的小伙伴可以私信或评论直接问博主,喜欢博主的可以关注我哦,我是活动的笑脸。