【导语】:想制作属于本人的桌面应用程序吗?这有 15 个示例带你手把手入门。

简介

本次将介绍一个用 PyQt 框架和 Python 编写的 15 个小型桌面应用程序的合集。

这其中很多应用程序在 learnpyqt 网站上有更具体的探讨。如果你对创立GUI应用程序还不相熟,能够查看 pyqt5 入门教程。

这个开源我的项目的地址是:https://github.com/learnpyqt/...

App列表

这些 app 将展现 Qt 框架的各个局部,包含高级小部件、多媒体、图形视图和无装璜窗口。当然,最乏味/有特色且性能残缺的利用是扫雷,纸牌和画图。

  1. 网络浏览器(无选项卡)-“MooseAche”
  2. 网络浏览器(选项卡)-“Mozzarella Ashbacker”
  3. 扫雷-“Moonsweeper”
  4. 记事本-“No2Pads”
  5. 计算器-“Calculon”(QtDesigner)
  6. 文本编辑器-“Megasolid Idiom”
  7. 摄像头/快照-“NSAViewer”
  8. 播放器-“Failamp”
  9. 便笺-“Brown Note”(QtDesigner)
  10. 画图-“Piecasso”(QtDesigner)
  11. 解压缩-“7Pez”(QtDesigner)
  12. 翻译-“Translataarrr”(QtDesigner)
  13. 天气-“Raindar”(QtDesigner)
  14. 货币转换器-“Doughnut”(PyQtGraph)
  15. 单人纸牌-“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 等。