在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter 、强大的 PyQt5 和 PySide2 ,还有 wxPython 。借助这些或内置或第三方的模块,我们可以轻松地编写跨平台的桌面图形界面程序。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

同时,我们还能直接使用 PyInstaller 、 Nuitka 、 cx_Freeze 等 Python 第三方程序打包模块,将编写好桌面图形界面程序打包为各个平台的二进制可执行程序文件,比如 Windows 下的 exe 程序执行文件。

通常我们会将程序按需打包为单个的 exe可执行文件 或包含整个文件夹的可执行文件。

文章目录

程序更新

随着版本的迭代和功能的优化,我们编写的程序会需要进行更新。

在 Web 应用中,这个问题几乎不需要处理,因为只要服务器更新了,浏览器打开的页面或功能都将是最新的。

而在桌面图形界面程序中,则有点棘手。因为我们打包好的程序都是离线分发的,按照以往的流程,我们需要重新打包程序,然后,在某个页面放上新版本程序的下载链接,最后提醒使用者下载更新。

如果使用者没有注意到,那么就凉拌了。

如何解决呢?我们需要在编写的桌面图形界面程序中,额外添加一个更新机制,用于检测更新、下载更新和完成更新。

下面我们来介绍一下这个流程。

检测更新

要实现程序的更新,我们首先需要让程序能够检测到软件存在更新。在这里,我们需要一个远程的更新服务器,来提供更新的检测响应。

然后,在程序启动的时候,调用一个子线程,向远程服务器发起请求,以获得是否需要进行更新。

下载更新

如果没有程序的更新,自然就略过了。

如果有程序的更新,我们就需要对新版本的程序进行下载。

下载有两种方式:

  1. 直接通过主程序进行下载;
  2. 编写一个单独的更新程序,主程序调用更新程序进行下载;

直接通过主程序进行下载的方式对于下载是可行的,但是没法自己覆盖更新自己。所以我们选择第二种方式。

主程序通过一个子线程使用 subprocess.Popen() 调用打包为单个文件的更新程序。

然后更新程序再核对一遍是否存在版本更新,如果存在更新,那么继续请求远程服务器,下载新版本的程序。

程序文件的下载,我们可以直接使用 requests 模块,示例代码如下所示:

def work(self):# 新建一个文件对象temp_file = os.path.join(self.download_path,'update.zip') # 指定更新包下载的路径logger.info("下载临时文件路径为:{}".format(temp_file))with open(temp_file,'wb') as self.fileobj:# 请求更新文件包f = requests.get(self.download_url, stream=True)# 写入文件offset = 0for chunk in f.iter_content(chunk_size=self.buffer):if not chunk:breakself.fileobj.seek(offset)self.fileobj.write(chunk)offset = offset + len(chunk)proess = offset / int(self.filesize) * 100# logger.info("写入块:{},{}".format(offset,proess))self.download_proess_signal.emit(int(proess))

解压覆盖

新版本的程序下载完,我们就需要将其解压到原有的文件夹了。这时候,更新程序和主程序分开打包的好处就出来了,我们通过更新程序将正在运行的主程序进程结束掉,然后将新版本的程序压缩包解压覆盖现有程序所在的文件夹:

def work(self):# 1.杀死主程序进程for proc in psutil.process_iter():if proc.name() == 'xxx.exe':proc.kill()# 2.获取程序本地路径current_path = os.path.dirname(os.path.abspath(__file__))logger.info("当前程序路径:{}".format(current_path))# 3.解压新版本压缩包到程序本地路径update_file_path = os.path.join(self.download_temp_path, 'update.zip')shutil.unpack_archive(filename=update_file_path,extract_dir=current_path)# 4.删除临时文件夹和文件os.remove(update_file_path)shutil.rmtree(self.download_temp_path)

这样,我们就实现了Python编写的桌面图形界面程序的更新检测、下载和覆盖安装。

Python编写的桌面图形界面程序实现更新检测和下载安装相关推荐

  1. python复杂美观的图形界面_Python图形界面美化的方法论

    很多人都吐槽,使用 Tkinter.PyQt5等工具制作出来的图形界面程序太丑了.既然觉得它丑,我们来想想,它为什么会那么丑. 文章目录 功能性是开发的第一要务 模块提供的都是原生组件 界面的美化的几 ...

  2. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  3. python编写的软件界面-用Python写一个带图形界面的文件压缩软件

    这又是一篇用Python写小软件系列,最近有点写上瘾了,文件压缩和解压我们在日常工作学习中会经常用到,比如winrar.快压.好压等压缩软件,猿人学用Python做个简易图形界面的压缩软件. 打开之后 ...

  4. 编写图形界面程序,显示一个红色反弹球的程序,当该球撞击Applet边框时,它应从边框弹回并以相反方向45°运动。

    编写图形界面程序,显示一个红色反弹球的程序,当该球撞击Applet边框时,它应从边框弹回并以相反方向45°运动. import javax.swing.*; import java.awt.*;cla ...

  5. python漂亮界面 数独游戏源代码_使用Python编写数独游戏自动出题程序

    原标题:使用Python编写数独游戏自动出题程序 数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. fromrandom importshuffle, randrange ...

  6. win10上运行linux程序吗,Win10可以运行 Linux 的图形界面程序了

    Win10可以运行 Linux 的图形界面程序了 2016年04月13日 16:39作者:cnBeta编辑:李佳辉 分享 正如大家所知道的,大多数 Linux 上的命令行二进制程序现在可以原生地运行在 ...

  7. 利用Python编写一个高斯正反算程序

    一.前言 这次的高斯正反算程序是使用的Python编写的. 环境信息是:Win10.PyCharm 2021.3.1.PySide6 6.3.1.Python 3.9.9,基于QT Designer设 ...

  8. 怎么开发Linux图形界面程序,Linux下的图形界面编程

    Linux下的图形界面编程 一.Qt和GTK+ 虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面.经过多年的发展,目前已经存在多种用于在Linux下开发 ...

  9. 手机怎样运行linux命令行,不仅是命令行 Windows 10 也可以运行 Linux 的图形界面程序了...

    微软在 Build 2016 上宣布这个新闻后,很快就在其发布的 Insider 预览版 14316 上将这个功能展示给了迫不及待的粉丝们.根据微软当前的技术说明,目前除了部分命令行程序不能运行之外, ...

最新文章

  1. 全国大学智能车竞赛证书编号规范
  2. Linux2.6 内核进程调度分析
  3. 3*3 c语言,C语言实现小游戏(三) 3*3棋盘游戏
  4. wordpress woodstock主题导入demo xml文件 execution time out
  5. 如何使用Ionic和Firebase在短短三天内创建冠状病毒跟踪器应用程序
  6. GARFIELD@01-01-2005
  7. 新年新气象,从SQL Server 2019新特性开始!
  8. 王一博、张艺兴等多位明星起诉医美平台更美App
  9. Qzone高性能HTTPS实践
  10. 360浏览器设置语言国际化
  11. Python安装word2vec
  12. 写在2020.11.19 周四晚上
  13. php实现数字英文验证码,php 英文、数字验证码的完整代码
  14. 24 个很酷的 Linux/Unix 工具
  15. 阿玛机器人_豪华日本声优阵容,《战斗天赋解析系统》让你耳朵怀孕!
  16. Microsoft Powershell 介绍
  17. java过滤器修改响应,在过滤器中实现修改http请求体和响应体
  18. 前端基础_JavaScript
  19. 逻辑学试题库及答案-辛苦整理-最全版本
  20. 【测试新人必备】测试报告如何编写?

热门文章

  1. django-学生列表的删除操作
  2. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!
  3. Percona XtraDB cluster--第一部分:XtraDB cluster安装 (Centos7)
  4. Winform使用DevExpress的WaitDialogForm画面 z
  5. pig:group by之后的其它统计方法一
  6. Spring框架声明式事务管理
  7. 【记录】利用jar包制作docker镜像
  8. git 无法 push 远程仓库 【Note about fast-forwards】
  9. js 正则 正确的书写逻辑 中 德文小数点区别
  10. 【安卓开发】启动另一个 Activity