- pyqt5环境搭建
- 使用pyqt5写一个爬虫内容输入案例,包含内容滚动
- 使用pyinstaller导出exe文件
一. pyqt5环境搭建
基础环境准备
1. 创建虚拟环境conda create -n qtEnv python=3.8.5
2. 新建一个文件夹作为项目根目录D:\qtprojects\first_qt
3. 使用pycharm打开D:\qtprojects\first_qt
,并配置好虚拟环境qtEnv
pyqt5环境
1. 安装pyqt5
pip install pyqt5 -i https://pypi.douban.com/simple/
pip install pyqt5-tools -i https://pypi.douban.com/simple/
2. 把pyqt5配置到pycharm
点击File-->点击Settings-->Tools-->External Tools
(截图是已经配置好的样子,先不用管)
先配置Qt Designer
Name:QtDesigner
program:designer.exe的安装路径(比如我的D:\software\anaconda\envs\qtEnv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe)
parameter:不填
Working directory: $FileDir$
再配置pyuic5
Name:pyuic5
Program:pyuic5.exe的安装路径(比如我的D:\software\anaconda\envs\qtEnv\Scripts\pyuic5.exe)
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working directory:$FileDir$
最后配置pyrcc
Name:pyrcc
Program:pyrcc5.exe的安装路径(比如我的D:\software\anaconda\envs\qtEnv\Scripts\pyrcc5.exe)
Arguments:$FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory:$FileDir$
到这里,pyqt5环境搭建就已经搭建好了,下面开始一个爬虫内容输出实战案例
二. 爬虫内容输出案例
1. 打开视图设计页面
2. 通过拖拉组件,生成如图样式
3. 样式生成代码
4. 编写逻辑代码
import sys
import threading
import time
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QMainWindow, QApplication
from test import Ui_MainWindow
import requests
class Window(QMainWindow, Ui_MainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
self.setupUi(self)
self.connect_signals()
def connect_signals(self):
self.btn_sure.clicked.connect(self.btn_sure_clicked)
# self.btn_sure.clicked.connect(self.btn_sure_clicked)
self.btn_cancel.clicked.connect(self.btn_cancel_clicked)
def btn_sure_clicked(self):
# address = self.input_address.text()
# response = requests.get(address)
url = "https://www.dongchedi.com/motor/searchapi/search_content_pc/?keyword={keyword}&offset={offset}&count=24&cur_tab=2&city_name=%E5%8C%97%E4%BA%AC&motor_source=pc_new&format=json&motor_search_type=0"
def _slot1(text_edit, input_address):
keyword = input_address.text()
num = 0
for i in range(10):
offset = 8 + 24 * i
response = requests.get(url.format(keyword=keyword, offset=offset))
resp_json = response.json()
data = resp_json.get("data")
for item in data:
cell_type = item.get("cell_type")
if cell_type != 202:
continue
num += 1
title = item.get("group_cell").get("title")
text_edit.append(str(num) + ". " + title)
# text_edit.append(input_address.text()) # 文本框逐条添加数据
text_edit.moveCursor(text_edit.textCursor().End) # 文本框显示到底部
time.sleep(0.15)
threading.Thread(target=_slot1, args=(self.text_edit, self.input_address)).start()
def btn_cancel_clicked(self):
self.text_edit.clear()
def main():
app = QApplication(sys.argv)
mywindow = Window()
mywindow.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
5. 运行效果
滚动核心逻辑
1、按下按钮pushButton,把单行文本框lineEdit里的内容循环不断的添加到多行文本展示框textBrowser。
2、必须要用线程做这件事,不然主程序会卡死。
3、必须添加sleep(),不然主程序会卡死。
4、用函数的闭包做这样的事情,效果很好。
def slot1(self):
def _slot1(textBrowser,lineEdit):
while True:
textBrowser.append(lineEdit.text()) #文本框逐条添加数据
textBrowser.moveCursor(textBrowser.textCursor().End) #文本框显示到底部
time.sleep(0.2)
threading.Thread(target=_slot1,args=(self.textBrowser,self.lineEdit)).start()
三. exe文件导出
- 安装导出包
pip install pyinstaller
- 执行导出命令
pyinstaller -Fw main.py
- 稍后就会生成exe文件
- 执行没有问题