# Crawler_PyQt
## 零基础PyCharm+PyQt+QTDesigner实现QT前端界面开发
#### 0x00 简介
* 这个项目是一个简单的Python爬虫demo,该练手小项目希望能帮助到大家,熟悉Python和QT的整合开发。
##### 运行环境及所需工具
* 编译器:PyCharm
* Python版本:3.6+
* QT Designer版本:5.15.2
##### 功能介绍
* 点击“开始爬取”即可对指定网址进行爬取,并将内容显示在界面中。目前仅能分析中国新闻网这一个URL,可以将页面中所有新闻的标题输出。
<img src=".\pyqt.assets\image-20230703150536932.png" alt="image-20230703150536932" style="zoom:80%;" />
* 点击“导出结果”即可选择文件夹进行结果导出,
<img src=".\pyqt.assets\image-20230703150914949.png" alt="image-20230703150914949" style="zoom:50%;" />
* 导出完成后会有路径提示。
<img src=".\pyqt.assets\image-20230703151014987.png" alt="image-20230703151014987" style="zoom:80%;" />
接下来第1到4节将介绍PyCharm和QT Designer的基本用法以及环境配置,第5节将详细介绍本项目实现过程。
#### 0x01 安装工具
* 首先需要安装 PyCharm 和 QtDesigner,PyCharm 直接在官网上选择社区版就可以免费下载了, QtDesigner 也需要单独下载安装。若之前安装过 QtCreator,可能同时也安装了 QtDesigner,在windows搜索栏中搜索 Designer 即可找到该应用。(一般都有安装)
<img src=".\pyqt.assets\image-20230703102854607.png" alt="image-20230703102854607" style="zoom:80%;" />
如果只有QtCreator的话,可以安装pyqt5-tools,然后在工具目录找到,例如可以是
```
D:\ProgramData\Anaconda3\Library\bin\designer.exe
D:\ProgramData\Anaconda3\envs\py3-10\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
F:\Python\python3.6.3\Lib\site-packages\pyqt5_tools\designer.exe
```
pip安装
```
pip install pyqt5-tools
```
若安装时报错:error: Microsoft Visual C++ 14.0 or greater is required.
需要安装Visual C++ 或者使用Conda添加环境
```
conda install libpython m2w64-toolchain -c msys2
```
* 为了方便后续配置,选择两次打开文件位置,找到最终的应用程序路径。
例如我的就在这个路径:
```
D:\Qt\5.15.2\mingw81_64\bin\designer.exe
```
<img src=".\pyqt.assets\image-20230703103059881.png" alt="image-20230703103059881" style="zoom:80%;" />
#### 0x02 PyCharm新建项目
* 打开PyCharm,新建一个qt_helloworld项目
<img src=".\pyqt.assets\image-20230703101836762.png" alt="image-20230703101836762" style="zoom:80%;" />
* PyCharm会自动帮我们生成一个main.py文件,点击运行可看到Hi,PyCharm的输出
<img src=".\pyqt.assets\image-20230703102202476.png" alt="image-20230703102202476" style="zoom:80%;" />
#### 0x03 PyCharm配置外部工具
* 选择 File-Settings 打开设置界面
<img src=".\pyqt.assets\image-20230703104821893.png" alt="image-20230703104821893" style="zoom:80%;" />
* 在 Tools--->External Tools 找到外部工具配置界面,点击加号新建工具,添加 QT Designer 工具。
Program(应用程序)把之前找到的应用路径输入,例如我这里是:
```
D:\Qt\5.15.2\mingw81_64\bin\designer.exe
```
Arguments(实参)留空;
Working directory(工作目录)设为 `$FileDir$` 表示默认当前 PyCharm 的工作目录,可根据实际情况调整。
<img src=".\pyqt.assets\image-20230703105146838.png" alt="image-20230703105146838" style="zoom:80%;" />
* 同理,我们再配置python自带的pyUIC工具。
Program 为你电脑里Python路径下的`\Scripts\pyuic5.exe`,或者`pyuic5.bat`例如我这里是
```
C:\Users\12420\AppData\Local\Programs\Python\Python37\Scripts\pyuic5.exe
```
Arguments 这里设置成这个命令,表示将当前文件转化成py文件,使用该工具时会自动执行该命令,在这里就是将QT Designer生成的`.ui`文件转化为`.py`文件
```
$FileName$ -o $FileNameWithoutExtension$.py
```
Working directory 这里同上,我这里设成当前工作目录
```
$FileDir$
```
配置完成就可以开始设计界面了
<img src=".\pyqt.assets\image-20230703105703418.png" alt="image-20230703105703418" style="zoom:80%;" />
#### 0x04 QT Designer 界面设计
* 通过 PyCharm 打开 QT Designer,选择 Tools--->External Tools--->QT Designer。
<img src=".\pyqt.assets\image-20230703111559257.png" alt="image-20230703111559257" style="zoom:80%;" />
* 点击后会打开QT Designer的界面,这里我们以 `Main Window` 窗口为例,点击创建即可。
<img src=".\pyqt.assets\image-20230703111757407.png" alt="image-20230703111757407" style="zoom:80%;" />
* 选择左侧 Display Widgets 栏下的Label标签,拖入界面即可创建一个文本,双击可输入HelloWorld!
<img src=".\pyqt.assets\image-20230703112035622.png" alt="image-20230703112035622" style="zoom:80%;" />
* 右键选择“改变多信息文本...”可修改文本框和字体的基本属性,这里我们可以把字体调大一些。
<img src=".\pyqt.assets\image-20230703112233787.png" alt="image-20230703112233787" style="zoom: 50%;" />
* 点击文件-->保存,或者 `Ctrl+s` 保存项目为`helloworld.ui`,可看见保存的路径为PyCharm的工作路径。
<img src=".\pyqt.assets\image-20230703112350438.png" alt="image-20230703112350438" style="zoom: 67%;" />
#### 0x05 导入PyCharm编辑
* 使用pyUIC工具将`helloworld.ui`转化为`helloworld.py`。
<img src=".\pyqt.assets\image-20230703112829361.png" alt="image-20230703112829361" style="zoom:80%;" />
* 这里转化的本质实际上就是调用了pyuic5.exe,通过之前设好的指令转化,在PyCharm的命令窗口可看见转化逻辑。通过cmd执行命令也是同样可行的。
<img src=".\pyqt.assets\image-20230703113127792.png" alt="image-20230703113127792" style="zoom:80%;" />
* 转化成功后可看到`helloworld.py`文件
<img src=".\pyqt.assets\image-20230703112948210.png" alt="image-20230703112948210" style="zoom:80%;" />
`helloworld.py`
```python
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'helloworld.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(330, 250, 91, 21))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">HelloWorld!</span></p></body></html>"))
```
* 修改main.py中的文件,替换为如下代码。其中需要引入刚刚生成的helloworld文件,并设置主函数调用�