赞
踩
这篇文章主要介绍了用python能不能做出有界面的软件?,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
Source code download: 本文相关源码
我们以Windows系统为例,当我们打开一个记事本,会出现如图所示的界面。如果没有该界面,我们看到的将是一堆代码练手的70个超火python小项目。相比于直接展示代码,这种应用程序不仅使用起来更加便捷,也更利于用户的交互控制。
那么,以图形方式显示计算机的用户操作界面,就是我们所说的用户图形界面(Graphical User Interface),通常简称为GUI
。
基于此,我们将会为大家介绍如何给Python代码“增加”一个用户图形界面。
在Python中,用于制作“ 用户图形界面 ” 的库有很多,最常见的像tkinter
、pyqt5
。
但是,本次课我们使用的是PySimpleGUI
库,之所以使用这个库主要有以下两个重要原因:
PySimpleGUI是在上述库之上进行了二次封装,基本可以实现上述模块的所有功能,比如具有常见的按钮、弹窗、滑块、下拉菜单等。
PySimpleGUI制作图形界面,布局设计更简单、更人性化,代码量更少。
由于PySimpleGUI属于Python的第三方开源库,因此需要额外安装、导入后,才能使用。
如果你不能使用这个库,请使用如下命令安装这个库。
# 这个是在命令行窗口中执行 pip install PySimpleGUI
安装完成后,可以使用下方代码测试是否安装成功。
import PySimpleGUI as sg
当我们安装并导入PySimpleGUI这个库后,只需要5步就可以帮助我们制作一个简单的“用户图形界面”。
有了上述基础,我们利用5步法,看如何制作一个简单的图形化界面。
# ① 导入相关库 import PySimpleGUI as sg # ② 确定行数,定义布局 layout = [ [sg.Text("你的名字叫什么?")], [sg.Input()], [sg.Button("确认"),sg.Button("取消")] ] # ③ 创建窗口 window = sg.Window(title="made my 黄老师",layout=layout) # ④ 事件循环 while True: event,values = window.read() if event == None: break elif event == "确认": sg.Popup("执行确认任务") elif event == "取消": sg.Popup("执行取消任务") # ⑤ 关闭窗口 window.close()
在①处,导入 PySimpleGUI 模块,并指定别名为 sg。
在②处,定义窗口布局。参数 layout 是一个列表嵌套,内层包含几个列表就代表窗口有几行,各窗口从上到下依次排列。而同一个内层列表中的控件,即同一行,各控件从左到右依次排列,比如第 3 行的“确认”和“取消”按钮。
在③处,创建窗口。该方法中包含 title 和 layout 两个参数。其中,title 表示窗口的标题,layout 即上述定义的窗口布局参数。
在④处,定义一个事件循环。常见的表达方式就是 while True+break 组合。其中,event 表示事件,values 表示返回值。
在⑤处,关闭窗口。
这里主要为大家介绍几个有用的概念,这对于我们灵活制作一个“用户图形界面”非常有帮助。
“事件”指的是前面代码中的event参数。对于界面上的每一个按钮,我们每次单击一下,就会发生一个事件。我们可以依据不同的事件,让程序执行不同的任务。
常见的“事件”分为3种,分别是“窗口关闭事件”、“按钮单击事件”、“其他元素事件”,如下所示 :
窗口关闭事件:窗口关闭按钮是一个特殊的按钮,存在于界面的右上角,即“x”按钮。定义窗口关闭事件是非常重要的。当你忘记定义窗口关闭事件,却单击了窗口右上角的“x”按钮时,它会默默地消耗你所有的 CPU 资源。
按钮单击事件:单击上述的“确认”和“取消”按钮,均会产生按钮单击事件。
其他元素事件 :像文本元素、输入框、下拉菜单等控件的事件属性默认是关闭的。当设置参数enable_events
为True时,它们也将具有事件属性。
在上述代码中,假如我们单击“确认”或“取消”按钮,这两个按钮均会产生按钮单击事件,因此会展示出不同的弹窗。
“返回值”指的是上述代码中的 values 参数。对于文本输入框,我们往往需要额外输入文字,values 表示的就是用户输入。如果什么都不写,返回值就是空字符串。
对于上述代码,我们稍加改动,这里我们仅仅多了一行print(event,values)
打印代码。
从结果中可以发现,最终返回了一个字典形式的值。因此,我们可以利用“键值对”方式来捕捉键对应的值,即“用户输入”。
在上述代码的基础之上,我们再次改动一下代码:
import PySimpleGUI as sg layout = [ [sg.Text("你的名字叫什么?")], [sg.Input(key="输入文字")], [sg.Button("确认",key="ok"),sg.Button("取消",key="cancel")] ] window = sg.Window(title="made my 黄老师",layout=layout) while True: event,values = window.read() print(event,values) if event == None: break elif event == "ok": sg.Popup("执行确认任务") elif event == "cancel": sg.Popup("执行取消任务") window.close()
这里我们又给 Input() 和 Button() 方法都增加了key参数。再次打印最终的返回值,可以发现原始的键已经被替换成自定义的键。同时原有的事件属性标识也相应地替换为 ok 和 cancel 了。
其实,key 参数表示身份标识。当我们定义了该参数时,原有的身份将被替换为自定义的标识。
假如你的领导发给你这样一批数据,该数据存储了一批身份证号码。你的领导需要你快速统计出他们的户籍地址和年龄,此时应该怎么做呢?
众所周知,身份证中记录了某人的个人信息,比如户籍地址 、出生年月等信息。在Python中,我们可以利用id_validator
库来实现身份证信息的相关提取。
from id_validator import validator info = validator.get_info("130801200407010928") info """ {'address_code': '130801', 'abandoned': 1, 'address': '河北省承德市市辖区', 'address_tree': ['河北省', '承德市', '市辖区'], 'age': 18, 'birthday_code': '2004-07-01', 'constellation': '巨蟹座', 'chinese_zodiac': '申猴', 'sex': 0, 'length': 18, 'check_bit': '8'} """
对于任意一个身份证件号码,调用 validator 模块中的 get_info() 方法,可以返回一个字典格式的数据。于是,利用“键值对”即可获取该身份证所对应的地区、出生日期等信息。
有了上述基础,针对本节开头讲述的案例,我们使用 id_validator 库就可以快速统计公司所有员工的户籍地址和年龄。
import pandas as pd from id_validator import validator df = pd.read_excel("身份证号.xlsx") df["省份"] = df["身份证号"].apply(lambda x: validator.get_info(x)["address_tree"][0]) df["城市"] = df["身份证号"].apply(lambda x: validator.get_info(x)["address_tree"][1]) df["年龄"] = df["身份证号"].apply(lambda x: validator.get_info(x)["age"]) df.to_excel("统计结果.xlsx",index=False)
这里我们利用代码已经实现了需求,如何为这个 代码增加一个 图形化界面呢?
import os import openpyxl import pandas as pd import PySimpleGUI as sg from id_validator import validator def main(path): df = pd.read_excel(path) df["省份"] = df["身份证号"].apply(lambda x: validator.get_info(x)["address_tree"][0]) df["城市"] = df["身份证号"].apply(lambda x: validator.get_info(x)["address_tree"][1]) df["年龄"] = df["身份证号"].apply(lambda x: validator.get_info(x)["age"]) path_new = os.path.join(os.path.dirname(path),"统计结果.xlsx") df.to_excel(path_new,index=False) layout = [ [sg.Text("请选择Excel文件所在目录:"), sg.Input(size=(25,1),key="路径"), sg.FileBrowse(button_text="选择",file_types=(("浏览文件","*.xlsx"),))], [sg.Button("开始统计")] ] window = sg.Window("自动统计:身份证件归属地生成器",layout) while True: event, values = window.read() if event == None: break elif event == "开始统计": if values["路径"]: main(values["路径"]) sg.popup("统计完毕!") else: sg.popup("请先输入Excel文件所在的路径!") window.close()
不管是微信、QQ,还是其他任何电脑软件,在它们的安装目录下通常存在一个扩展名为 .exe 的文件,双击它就可以直接运行对应的软件。
而对于Python程序打包,其实就是将代码文件打包成以 .exe 结尾的可执行文件(executable file)。其最大的好处就是,可以将Python代码在没有安装Python的计算机上运行。
在 Python 中,使用pyinstaller库可以很好地实现程序打包。
由于pyinstaller属于Python的第三方开源库,因此需要额外安装、导入后,才能使用。
如果你不能使用这个库,请使用如下命令安装这个库。
# 这个是在命令行窗口中执行 pip install pyinstaller
安装完成后,可以使用下方代码测试是否安装成功。
import pyinstaller
当我们成功安装该模块后,整个打包过程都是在“命令行窗口”中执行的。其语法格式如下所示:
Pyinstaller 参数1 参数2 Python程序.py
常见参数如下所示:
有了上述的基础,整个打包过程可以简化为以下3步:
Ⅰ 将Python代码保存为.py脚本文件 ;
Ⅱ 打开命令行窗口;
Ⅲ 执行打包代码;
但是这样做,生成的文件非常大,我的电脑生成的打包文件大约有700多M,不利于传输给他人使用。
因此,我们不推荐这种方式。那么,如何解决Python程序打包后出现的文件过大问题呢?
为什么会出现打包后文件特别大的问题呢?
这是由于 Anaconda 自身内置了很多库,并且我们在使用 Python 的过程中,也安装了很多第三方模块。在执行打包命令时,它会将所有模块统统打包。
这里我们将介绍如何使用“虚拟环境”解决这个令人烦恼的问题 。首先,我们需要在电脑的【开始】菜单中找到并点击Anaconda Prompt
选项,并单击 打开。
接着,在打开的命令行窗口中依次执行以下命令。
# 创建虚拟环境 conda create -n 虚拟环境名字 python==3.8 # 激活虚拟环境 conda activate 虚拟环境名字 # 只安装 Python 程序涉及的模块 pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install id-validator -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install PySimpleGUI -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 切换文件目录 cd D:\Anaconda\Python\Python培训(第1期)\第18次课 D: # 执行Pyinstaller打包程序 Pyinstaller -F -w a.py # 退出虚拟环境 conda deactivate
最终会生成一个dist文件夹,其中包含一个名为a.exe的应用程序(双击即可应用)。
---------------------------END---------------------------
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。