PyQt5基础与实际应用(一)环境搭建
本帖最后由 brujah 于 2020-6-8 18:51 编辑# 前言
很久以前就想静下心来写一些自己感兴趣的小项目,希望能沉淀一下自己这些年所掌握的知识。事实上独立开发者在国内一直很难做起来,但能拥有一款独立产品我觉得可能是大部分开发者会引以为豪的事情。本系列严格意义上来讲不算是教程,只是记录自己在开发这个系列的所思所考,过程会尽可能详细记录,但我认为过于基础的东西并不会深入讲解。项目涉及到的源码会在文章底部放出。
# 工欲善其事必先利其器
- 已安装 Python3.8.2 的 Windows 10 电脑:性能不用太好,能看岛国动作影视作品就行
- PyCharm 2020.1.1 (Professional Edition):有钱的用正版,没钱的用社区版,没脸没皮的用破解版
- 一个能访问 Baidu/Google 的浏览器
- Python 官方文档地址(现已加入豪华中文大餐):(https://docs.python.org/zh-cn/3/)
- PyQt5 官方文档地址(整站不超过26个字母):(https://doc.qt.io/qtforpython/index.html)
# PyQt5的安装与测试
就像我一个连 QQ 都没有的人是不会告诉你们我是如何拥有一台电脑的一样,在这里我并不会分享如何搞定` Python `和` Pycharm `的,搞定这两个是你能坚持看下去的前提,记住,最好的两位老师,一个叫` 搜索 `,另一个叫` 动手 `。
## Pycharm 中新建一个 PyQt5 的工程
### 更换 pip 源
如果你不懂科学上网是什么的话,我强烈建议你更换一下` pip `的源,这个操作将让你的寿命至少增加 30% 以上。快捷键` Win + R `打开运行复制粘贴` %HOMEPATH% `后回车,新建文件夹` pip `并进入,新建文本文档打开并复制下面内容粘贴保存,最后将文本文档改名为` pip.ini `即可。
```json
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
```
其它可选源如下:
```json
豆瓣:https://pypi.doubanio.com/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
```
### 选择工程存放地址
首次打开流程:打开` Pycharm `->` Create New Project `->
已创建过项目流程:打开` Pycharm `->` MenuBar `->` File `->` New Project ... `->
选择` Pure Python `,在` Location: `后面选择你要保存的项目地址,你存放的最后一个文件夹名称将作为此次工程的名称,切记!
### 创建工程
选择或新建好工程目录后,你最好打开一下底下的` Project Interpreter:New Vitu... `选项,确保选中项是` New environment... `而不是` Existing inter... `,因为我们需要用到` venv `这个工具来确保在本台电脑上,我们不受其它版本的` Python `影响或是不同版本的` 第三方库 `导致的玄学 Bug 。 tips: 在` Python3.3 `及以上版本中的标准库内置了这个模块,你可以把它理解为是一个虚拟的独立的 Python 环境,类似于你脑海中的波多老师,你对虚拟的她做什么,都不会影响到她在现实世界的情况,而在你腻了以后,你还可以创建一个吉泽老师一样...
## 安装 PyQt5 和相应工具
### 更新 pip
几飞秒以后(时间长短根据电脑性能会有差异)你就可以看到 Pycharm 的全屏编辑界面,在正式安装 PyQt5 之前,你需要更新一下 pip 。
在 Pycharm 左下角找到` Terminal `并点击,不出意外的话, Pycharm 会弹出终端对话框,内容如下:
```bash
Microsoft Windows [版本 10.0.18363.836]
(c) 2019 Microsoft Corporation。保留所有权利。
(venv) D:\Dev\Learn_PyQt>
```
注意,当前路径前面一定要有` (venv) `,如果没有,则表示你当前并不处于虚拟环境中,这是你就可以利用上文中提到的` 一个能访问 Baidu/Google 的浏览器 `这个工具了...
在路径后输入` python -m pip install --upgrade pip `进行升级 pip ,一般来说不会遇到什么问题。
### 安装 PyQt5 和相应工具
还是同一个窗口,输入指令` pip install pyqt5 `后回车:
接着输入指令` pip install pyqt5-tools `并回车:
如果你的 pip 源中` PyQt5 `的版本高于` pyqt5-tools `的版本,安装过程中会卸载掉高版本,所以你其实可以直接安装` pyqt5-tools `来完成这两步操作。
# 利用 Qt Designer 来构建我们的第一个界面
## 找到 Qt Designer
让我们把视角转移到 Pycharm 的左侧,打开` Project `工程管理器,依次点开` 你的工程名文件夹 `->` venv `->` Lib `->` site-packages `->` pyqt5_tools `->` Qt `->` bin `,然后找到` designer.exe `文件,鼠标右键它选择 ` Show in Explorer `,这个工具是 Qt 为了让程序开发人员少掉点头发,把公司每天 8 小时交给业务逻辑就赶紧下班的好东西。其实就是可视化界面编辑器,让你不用写代码就可以完成一个界面的设计。
## 配置 Qt Designer
### Qt Designer 打不开?
当你满心欢喜的双击它以后是不是给你一个“This application failed to start because no Qt platform...”的弹窗报错,不要急,这是虚拟环境的路径导致的问题。在` designer.exe `文件的同级目录找到` platforms `文件夹,将其改名为` platforms.old `,当然,你也可以删除它,但作为一个快秃头的老程序猿给你个忠告,你要重视备份任何你需要修改的文件...
返回` designer.exe `文件的上一级目录,也就是` bin `的同级目录,找到` plugins `文件夹进入,拷贝其中的` platforms `文件夹粘贴至刚才的` designer.exe `文件的同级目录,再双击试试?
### uic 打不开?
这个问题其实在你第一次转换或预览代码的时候都不会遇到,但是简单配置一下可以保证你之后的掉头发过程愉快而轻松,那何乐而不为呢?
` uic `是 Qt 提供的将界面文件` xxx.ui `转成` xxx.py `或` xxx.h `文件的命令工具,我们来先创建一个主窗体来尝试触发这个错误。
#### 新建 Main Window
在引导窗选择` Main Window `然后点击` Create `就创建完成...
#### 触发报错
在` MenuBar `->` Form `->` View Python Code... `,此时会弹窗提示“Unable to launch 路径xxx ... 系统找不到指定的文件。”
#### 解决报错
如果你对刚才的文件路径还有印象的话你应该知道是什么问题了,让我们在` designer.exe `文件的同级目录找到` uic.exe `文件并复制它,还是这一级目录新建文件夹` bin `,将` uic.exe `文件粘贴进去,再试一次?
## 完成界面设计的两种方式
### Qt Designer的弱智操作
在 Qt Designer 左侧的` Widget Box `中拖动一个` Label `和一个` Push Button `空间到中间的窗体内,这样我们就完成了一个最简单的界面了。
通过` MenuBar `->` Form `->` Preview... `或者快捷键` Ctrl + R `可以预览到这个界面。
### 炫酷的代码操作
回到 Pycharm 编辑器中,在左侧的工程管理器中的项目名上右键` new `->` Python File `,在弹出的输入框内键入` app `就创建成功了。ps:此处有没有` .py `都可以, Pycharm 比你想象的要更智能...
键入下面的代码:
# 纸上得来终觉浅,绝知此事要躬行
1. 代码为什么弄成图片?因为不希望你复制粘贴直接` run `一下就感觉自己学会了;
2. 为什么没有窗口运行的预览图?因为想知道这两种方式运行的窗口有什么差异,你需要自己动手;
3. 为什么源码要设置下载门槛?因为希望你看着官方文档敲,而不是看着我的代码敲!
下一课:
(https://www.52pojie.cn/thread-1196145-1-1.html "PyQt5基础与实际应用(二)模块讲解和布局管理")
好吧感谢分享,打字辛苦了 终于有人讲讲了 感谢分享,辛苦 52的md文档就不能友好一点么… 感谢分享,辛苦
本帖最后由 yi猪小伊 于 2020-6-9 14:03 编辑
感谢谢谢 楼主威武,清晰明了。 收听楼主了,我最近在研究tkinter,刚好可以跟你这个一起学习~ 这里还可以学习python,好!就是年纪大了,有点学不进了一样