一,开发需求和开发思路
1.开发需求
python作为一门超级语言,其第三方库众多,适合我们用于二次开发成其他功能的程序,那么管理这些第三方库的工具就不得不说pip了!pip工具能让我们更加方便地管理第三方库,但是如何不在集成IDE专业软件上(pycharm那种),本地环境使用的pip工具只能在打开的cmd中操作命令。首先,每次都需要打开cmd窗口是一件较麻烦的事,其次,对于一个库(查询,下载安装,卸载)指令不连续,且要重复输入不同的指令,这让我们的工作和生活的时间和精力都浪费在这些麻烦事了!那么我们是否可以开发出一个pip工具GUI程序,能减轻pip工具带来的麻烦事呢? 答案是可以的,让我们一起来探索吧!
2.开发思路
pip工具操作缺点 | 对应解决思路 |
---|
每次都需要打开并在cmd窗口运行 | 让程序自动化地执行对应操作(多数情况下不打开cmd窗口) | 对于同一个库,pip指令输入不连续 | 在GUI窗口集成常见的pip工具指令功能,减少输入亢余 |
3.前期准备
知识储备 | 备注 |
---|
面向对象编程:类和对象 | 使用类,能使程序二次开发和维护更好,并且程序代码模块化和结构明了,利于阅读和开发 | GUI开发tkinter | python自带的tkinterGUI编写,虽然总体UI界面不比主流美观,但是开发简单,且外观逻辑上能满足我们的需求 | pyinstaller | python常见且流行的打包程序库,需要下载安装 |
二,编写代码
1.PIPS.py
该PIPS.py文件主要放置PIPS类,PIPS类主要有执行对应的pip操作的方法!
import os
class PIPS:
def __init__(self):
pass
def install(self,packages):
cmd='pip install '+packages
operation = os.popen(cmd)
return operation.read()
def uninstall(self,packages):
cmd='pip uninstall '+packages
os.system(cmd)
def piplist(self):
cmd='pip list'
operation = os.popen(cmd)
return operation.read()
def checkpip(self,packages):
cmd='pip show '+packages
operation = os.popen(cmd)
return operation.read()
def uppip(self,packages):
cmd='python -m pip install --upgrade '+packages
operation = os.popen(cmd)
return operation.read()
def opencmd(self):
os.system('cmd/c start')
2.PIPGUI.py
该PIPGUI.py文件(是主程序)主要放置PIPGUI类,PIPGUI类主要是GUI编写的类和导入并使用前面的PIPS类的方法。
from tkinter import *
from PIPS import PIPS
class PIPGUI(PIPS):
def __init__(self):
super().__init__()
root=Tk()
root.title('pip下载程序')
root.geometry('1020x550+200+80')
root.iconbitmap('pips.ico')
install_button = Button(root, text='下载并安装', width=18, height=2, command=self.installs)
install_button.place(x=20, y=100)
uninstall__button = Button(root, text='卸载', width=18, height=2, command=self.uninstalls)
uninstall__button.place(x=200, y=100)
list_button = Button(root, text='第三库列表', width=18, height=2, command=self.piplists)
list_button.place(x=20, y=160)
checkp_button = Button(root, text='库查询', width=18, height=2, command=self.checkpips)
checkp_button.place(x=200, y=160)
up_button = Button(root, text='更新库包', width=18, height=2, command=self.uppips)
up_button.place(x=20, y=220)
self.cmd_textout_button = Button(root, text='打开cmd窗口', width=18, height=2, command=self.opencmds)
self.cmd_textout_button.place(x=200, y=220)
self.in_textout_button = Button(root, text='清空输入框', width=18, height=2, command=self.in_textouts)
self.in_textout_button.place(x=200, y=280)
self.cmd_textout_button=Button(root, text='清空cmd运行结果', width=18, height=2, command=self.cmd_textout)
self.cmd_textout_button.place(x=20,y=280)
self.cmd_text = Text(root, width=85, height=40)
self.cmd_text.place(x=400, y=10)
self.in_text = Text(root, width=50, height=2)
self.in_text.place(x=20, y=10)
self.tip_label = Label(root, text='程序操作提示', width=35, height=2, bg='green', font=('宋体', 14))
self.tip_label.place(x=20, y=430)
self.tipout_label = Label(root, width=50, height=3, bg='green',font=('宋体',10))
self.tipout_label.place(x=20, y=485)
root.mainloop()
def text_get(self):
return self.in_text.get('1.0', 'end')
def cmd_in(self,result):
self.cmd_text.insert(1.0, result)
def cmd_textout(self):
self.cmd_text.delete('1.0', 'end')
self.tipout_label['text'] = '你清空了cmd运行内容框!'
def installs(self):
self.cmd_textout()
self.tipout_label['text'] = '你使用了下载安装的功能!注意使用前不要开代理节点!'
result = self.install(self.text_get())
self.cmd_in(result)
def uninstalls(self):
self.cmd_textout()
self.tipout_label['text'] = '不要输入带有等号的命令!请到弹出的cmd窗口确定是否卸载!'
self.uninstall(self.text_get())
def piplists(self):
self.cmd_textout()
self.tipout_label['text'] = '你查询了库列表,查询结果可下滑查看更多的内容'
result = self.piplist()
self.cmd_in(result)
def checkpips(self):
self.cmd_textout()
self.tipout_label['text'] = '注意输入时不要带有等号!'
result = self.checkpip(self.text_get())
self.cmd_in(result)
def uppips(self):
self.cmd_textout()
self.tipout_label['text'] = '你使用了库更新的功能!'
result = self.uppip(self.text_get())
self.cmd_in(result)
def in_textouts(self):
self.in_text.delete('1.0', 'end')
self.tipout_label['text'] = '你清空了输入框窗口!'
def opencmds(self):
self.opencmd()
self.tipout_label['text']='你打开了cmd窗口!'
if __name__ == '__main__':
PIPGUI()
三,程序打包
1,打包过程
(1)找到自己代码文件的目录,复制下来 (2)打开cmd窗口,把复制的目录复制到cmd窗口,并在前加cd,如下例所示: (3)确认已经下载安装好pyinstaller,输入如下指令:
pyinstaller -F <程序主文件>.py
(4)在生成的文件中,只保留<主程序>.spec文件,其余都删除(当然我们原来的py代码文件也在该目录下,肯定不用删除,保留就行)!如下:
(5)打开后缀为.spec文件,在Analysis中的第一行的列表,再添加我们主程序依赖和要导入的模块PIPS.py文件的字符串形式,如下图:
(6)再重新打开cmd,进入文件目录,输入以下指令:
pyinstaller -F <主程序名>.spec
如下图: (7)提示打包成功后,我们可以删除生成的_pycache_和build文件,只保留dist文件夹,因为这里面放置了生成exe程序,另外程序窗体要用到pips.ico文件,默认打包是不会把它移到dist文件夹的,我们要复制到dist文件下!
2.功能操作描述和使用
打包好的程序,打开后界面如下: 以下是各部分功能描述:
控件 | 功能描述 |
---|
输入框 | 接受输入的库名,根据对应的命令功能,可添加指定的版本号 | cmd运行结果框 | 把cmd运行结果输入到该框内显示,最右边最大的即是该框 | 下载并安装按钮 | 下载并安装库 | 卸载按钮 | 卸载库,点击后需要到附带的cmd窗口内填y(是)或n(否),填完不用关闭该窗口 | 第三方库列表按钮 | 点击后,即可把安装到本地的第三库总列表,并把信息反馈到cmd运行结果框 | 库查询按钮 | 查询对应的库信息,并把信息反馈到cmd运行结果框 | 更新库包按钮 | 更新对应的库,并把信息反馈到cmd运行结果框 | 打开cmd窗口按钮 | 打开新的cmd窗口 | 清除cmd运行结果按钮 | 点击后把cmd运行结果框的内容都清空了 | 清除输入框按钮 | 点击后把输入框内容清空 | 程序操作提示 | 主要对程序各个功能操作的一些提示 |
3.开发问题中遇到的问题及解决方法汇总:
pyinstaller打包python程序(多文件) Python-Tkinter图形化界面设计(详细教程 )
四,程序成品下载
为了更好地学习和分享该部分的内容,以及提供成品程序给大家直接观摩,特意放资源链接在此,供各位读者下载! pip指令GUI程序下载链接 最后,文中如有不足,敬请批评指正!
|