【导语】:想制作属于本人的桌面应用程序吗?这有 15 个示例带你手把手入门。
简介
本次将介绍一个用 PyQt 框架和 Python 编写的 15 个小型桌面应用程序的合集。
这其中很多应用程序在 learnpyqt 网站上有更具体的探讨。如果你对创立 GUI 应用程序还不相熟,能够查看 pyqt5 入门教程。
这个开源我的项目的地址是:https://github.com/learnpyqt/…
App 列表
这些 app 将展现 Qt 框架的各个局部,包含高级小部件、多媒体、图形视图和无装璜窗口。当然,最乏味 / 有特色且性能残缺的利用是扫雷,纸牌和画图。
- 网络浏览器(无选项卡)-“MooseAche”
- 网络浏览器(选项卡)-“Mozzarella Ashbacker”
- 扫雷 -“Moonsweeper”
- 记事本 -“No2Pads”
- 计算器 -“Calculon”(QtDesigner)
- 文本编辑器 -“Megasolid Idiom”
- 摄像头 / 快照 -“NSAViewer”
- 播放器 -“Failamp”
- 便笺 -“Brown Note”(QtDesigner)
- 画图 -“Piecasso”(QtDesigner)
- 解压缩 -“7Pez”(QtDesigner)
- 翻译 -“Translataarrr”(QtDesigner)
- 天气 -“Raindar”(QtDesigner)
- 货币转换器 -“Doughnut”(PyQtGraph)
- 单人纸牌 -“Ronery”(qgraphicscene)
装置应用
要应用这些 app,首先须要装置 requirements 文件。在大多数状况下,惟一要装置的就是 PyQt5,偶然也要装置其余依赖。如果要装置某些 app 特定的依赖,进入那个 app 文件夹内运行以下代码即可:
shell 代码
pip3 install -r requirements.txt
装置完之后,即可用 python3 来执行
python3 <filename>.py
应用程序的窗口就呈现了。
具体介绍
1、网络浏览器(无选项卡)
Mooseache:浏览器创造之初,它会是什么样子?
这是一个用 Python 和 Qt 构建的 web 浏览器示例。应用 Qt5.6 中引入的 QtWebEngineWidgets 零碎,它提供了一个带有罕用控件的单窗口浏览,以及保留和加载 HTML 体验的性能。
2、网络浏览器(选项卡)
Mozzarella Ashbadger:应用选项卡降级你的浏览体验
Mozarella Ashbacker 是网络浏览畛域的最新反动!返回上一页!打印!保留文件!帮忙列表!跟其余浏览器一样的话纯属巧合。
代码正文
选项卡
增加选项卡反对使浏览器的内部结构变简单不少,因为咱们当初须要跟踪以后流动的浏览器视图,既要更新 UI 元素(URL 栏、HTTPs 图标)以更改以后流动窗口中的状态,又要确保 UI 事件被调度到正确的 web 视图。
这是通过应用过滤事件的两头槽和增加信号重定向(应用 lamba 函数使其放弃简短)来实现的。
3、扫雷
Moonsweeper:用 pyqt 来克隆一艘扫雷艇,和外星人在月球上斗智斗勇。
摸索神秘的月球,但不要太靠近外星土著哦!
Moonsweeper 是一款单人益智游戏。游戏的指标是摸索你着陆的太空火箭四周的区域,而不是靠近致命的 Bug 外星人。可信赖的计数仪会通知你左近的 bug(雷)的数量。
这是一个简略的单人摸索游戏,模拟扫雷船,你必须在不涉及暗藏的地雷的状况下揭示所有的小方块。这个小方块实现是应用定制的 QWidget 对象,这些对象别离将它们的状态保留为 mine、status 和相邻的 mine 计数。在这个版本中,地雷被外星虫子(Bug)取代,它们也可能是其余任何货色。
代码正文
第一回合设计
在许多扫雷的变种中,初始回合被认为是一个自在回合:如果你在第一次点击时击中一枚地雷,它会被挪动到其余中央。这里咱们投机取巧了一点,让第一次尝试确保它是在一个非地雷的地点。这使咱们不用放心第一步走得不好导致须要咱们从新计算相邻。咱们把它解释为“围绕火箭的初步摸索”,让它听起来挺正当的。
4、记事本
No2Pads:用 PyQt 写的记事本
一个非常简单的记事本克隆,应用 QTextEdit 小部件来解决。反对文件加载、保留和打印。
5、计算器
Calculon:用 PyQt 写的桌面计算器
一个应用 Python 在 PyQt 中实现的简略计算器应用程序。用户界面是在 Qt 设计器中设计的,计算器操作是应用简略的基于堆栈的逻辑实现的。
6、文本编辑器
Megasolid-Idiom- 用 PyQt 写的富文本编辑器
这款编辑器是基于记事本的扩大,同样应用 QTextEdit 组件,但启用了富文本编辑。
反对多种字体、款式和段落文本对齐形式。还反对拖放图像,这些图像会主动关上并嵌入。
也反对保留和关上 HTML 格局的文档。
7、摄像头
NSAViewer- 有人正看着你
应用此摄像头快照应用程序,你能够拍摄摄像头以后正在查看的内容的照片。应用 QtMultimedia 多媒体框架解决与相机的所有交互,并反对多个摄像头(如果有的话)。
8、播放器
Failamp- 用 PyQt 打造简略的播放器
能够听音频和看视频,内置播放列表的简略应用程序。应用 QtMultimedia 和 QtMultimediaWidgets 解决播放和治理播放列表。
主界面提供了一个播放列表窗口,您能够在其中拖拽要播放的媒体文件。提供了规范媒体控件,以及时间轴部件和音量控件。
你还能够弹出一个浮动在顶部的视频窗口。
9、便笺
Brown Note—PyQt 中的桌面便笺应用程序
应用这个浮动笔记应用程序在桌面上做长期笔记。正文存储在本地 SQLite 数据库中。
这个应用程序非常简单,然而演示了在 PyQt 中创立无装璜窗口。删除窗口装璜会导致不能拖动窗口,因而咱们必须本人从新实现这种行为。
10、画图
Piecasso-PyQt 中的桌面绘画应用程序
用 Piecasso 来表白本人吧,惟一一个以派的现成图片为特色的绘画程序。
Piecasso 是 windows95 中画图程序的一个克隆,在此之上做了一些增减。这个程序的特点是有规范的工具,包含钢笔,刷子,填充,喷雾罐,橡皮擦,文本和一些形态。
你能够复制任何形态的图像,但不反对粘贴 + 浮动。画布的大小是固定的,加载的图像会依据须要进行调整。还包含一个图章工具,其中预装了美味派的图片。
代码正文
事件处理
所有工具都是用嵌套的事件处理程序实现的,这些处理程序会依据须要转发事件。这容许在具备独特行为(例如形态绘制)的工具之间重复使用大量代码。增加抉择区域动画须要一个计时器(更新匍匐蚂蚁),这减少了一些代码复杂性。
染色法
从性能的角度来看,这是这个应用程序中最辣手的局部。间接查看像素太慢(整个画布填充工夫约为 10 秒)。在 Python 中实现这一点的大多数代码都应用 numpy,但我不想独自为此引入依赖关系。
通过将图像导出为 bytestring,而后向下采样到每像素一个布尔字节(用于匹配 / 不匹配)来简化比拟循环,能够达到正当的速度。
尽管这个搜寻填充算法依然相当愚昧。
11、解压缩
7Pez- 有史以来最好 / 最差的解压应用程序
用一只猫解压你的文件。将 zip 文件拖放到悬空喵咪上,填充它手臂处。按下头部将会解压缩你的文件到当前目录。
当你关上应用程序时,猫咪的手臂处是空的。
只需将.zip 文件拖放到猫咪上,就能够用文件填充它。
按下猫的头,文件就会解压了。
12、翻译
Translatarrrr- 从任何语言到海盗语的即时翻译
从任何语言翻译(谷歌翻译反对)到海盗语。它调用了近程 api http://api.funteransations.com 将英语翻译成海盗语,以及谷歌的一个非官方的 Python 包装器将其余语言翻译成英语。
to English 局部应用基于 web 界面的 Python 库,而不是官网 API 客户机,因为没有必要且客户端是非收费的。所以应用程序的这一部分不能保障 100% 工作。
to Pirate 局部应用了一个受重大限度的公共 API。你大略只能收费翻译 5 次就被限度了。你能够花钱买一个 API 密钥来解除限制。
所以总结下来,这个程序用途不大。
13、天气
Raindar-PyQt 内置的天气预报应用程序
获取每日天气和 15 小时预报。数据来自收费的天气预报 API https://openweathermap.org/
14、货币转换器
Doughnut- 用 PyQt 实现的一个汇率追踪器
这是一个用 PyQt 实现的简略的货币汇率跟踪器,数据来自 fixer.io API。默认设置显示前 180 天的货币数据。
它会逐渐加载数据,分辨率一直进步。给定日期的汇率显示在右侧面板中,并依据鼠标地位进行更新。
代码正文
数据处理
该界面显示了过来 180 天的费率跟踪图(应用 PyQtGraph)。因为咱们不想向收费服务发垃圾邮件,所以对 API 的申请速率被限度为每秒 1 次,因而残缺的数据加载工夫为 180 秒(3 分钟)。
为了防止每次期待,咱们应用 requests_cache 办法,它应用本地 sqlite 数据库来存储最近申请的后果。对数据的申请应用一种渐进的“搜寻”办法:如果数据中存在缺口,则首先填充两头点,并且它更偏向于首先加载最近的工夫点。这意味着随着工夫的推移,整个情节的分辨率会逐步进步,而不是只进步缺口之后的。
转换
默认状况下,应用程序检索的是欧元汇率,并显示到该根底货币的换算。如果您更改根底货币,它将再次检索该新货币的所有数据。这个行为略微有点愚昧,因为如果咱们有对欧元的汇率,咱们能够通过欧元计算任何其余货币 -> 货币转换(损失一点点准确性)。
15、单人纸牌
Ronery-PyQt 中的纸牌游戏
经典的纸牌游戏。游戏跟纸牌在其余方面是雷同的,提供雷同的选项。它由 PyQt 构建,应用 QGraphicsScene 来解决游戏区域。
经典的纸牌获胜屏幕也实现了,只管因为播放画布不是位图,所以不会“填满”。但依然足够令人满意。
配置选项容许 1 次发 1 张或 3 张,容许 3、5 或有限轮。
代码正文
卡片解决
这里应用的办法是将每个能够搁置卡片的中央作为一个“堆栈”对象来解决它以后持有的卡片。每个堆栈负责其堆栈上卡片的布局。
堆栈还负责承受 / 回绝尝试在其上搁置卡的行为。有些堆栈,如交易堆不承受任何降牌。其余的非凡堆有特定的规定。
在大多数状况下,除了底部的“在玩”牌堆外,牌堆上的任何牌都没有分割。底部的卡片具备父子关系,容许一次拖动多张卡片。
完结动画
最初的完结动画是独立的,并且产生在较量工夫之外,所以第一个想法是有一个独自的假事件循环,应用 QApplication.processEvents 勾选。但那实现起来有点恶心。
相同,动画是由 QTimer 解决的,QTimer 通常在播放过程中处于闲暇状态,一旦被触发就会重复 ping 一个动画后退投放。这会挪动卡片(伪装是“重力”,反弹)以及在它们来到游戏区域后从新重叠它们。应用失常的重叠代码就能够实现从新重叠,这样它们就能够堆积起来。最初一个难题是阻止用户的交互,否则卡片依然能够被抓取和抛弃。实现这一点的最简略办法是在整个窗口上搁置一个对象,该对象被设置为捕捉(并放弃)所有鼠标单击。
最初,想创立本人的应用程序吗?
如果你感觉这些 app 有些太过简洁,心愿理解更多对于 PyQt 的信息,请参阅 PyQt5 教程,它涵盖了应用 PyQt 构建 app 从前到后所需的所有常识。
你也能够在这个网站上找到对于这些“小型 app”的评论。
扩大
如果你想理解更多,能够移步这里观看更多的官网示例:https://diagrams.mingrammer.c…
开源前哨
日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。