pyqt5-0001安装搭建环境

install

先安装 python3,然后安装 Anaconda 2019.10
pycharm 社区版 2019.3.1

创建虚拟环境 conda create -n pyqt_stock python=3.7 anaconda

# 升级 conda
conda update -n base -c defaults conda

pip install pyqt5
# 安装有问题使用国内代理
pip install pyqt5 -i https://mirrors.ustc.edu.cn/pypi/web/simple/
pip install pyqt5-tools -i https://mirrors.ustc.edu.cn/pypi/web/simple/

安装 QT5 然后可以使用设计工具设计界面

pyuic5.exe 将 Designer 生成的 ui 文件 转换为 python 文件
pyrcc5.exe 将 creator 生成的资源文件 qrc 转换为 python 文件
pylupdate5.exe 多语言设计时语言资源文件的工具软件

设计界面

使用 QtDesigner 设计界面然后保存为 xx.ui 文件,使用 pyuic5 转换为 python 文件

pyuic5 -o ui_xxx.py xxx.ui

响应界面事件

import sys

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget

import ui_main

class mainUi(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.__ui = ui_main.Ui_Form()
self.__ui.setupUi(self)
self.__ui.btn_loadDataByDate.clicked.connect(self.OnBtnLoadDataByDate)

def OnBtnLoadDataByDate(self):
self.__ui.label.setText("ddd")


if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
baseWidget = mainUi()

baseWidget.show()
sys.exit(app.exec_())

使用信号槽更新界面信息

使用线程池的方式

没使用线程的方式

class DaoService(QThread):
signal_str = pyqtSignal(str)

def get_trade_date(self):
"""
从接口获取有效交易日信息,存入数据库,返回结构样例
exchange cal_date is_open
0 SSE 20180101 0
1 SSE 20180102 1
2 SSE 20180103 1
"""
self.signal_str.emit(r'开始获取交易日期...')
str_cur_date = datetime.datetime.now().strftime("%Y")

class DataManagerUi(QWidget):
"""
资金曲线类
保存每个交易日的资金余额,绘制折线图
"""

def __init__(self, parent=None):
super().__init__(parent)
self.__ui = ui_data_manager.Ui_Form()
self.__ui.setupUi(self)
self.dao_service = DaoService()
...

def sign_str_proc(self, msg):
self.__ui.edit_log.append(msg)

class MainUi(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.__ui = ui_main.Ui_Form()
self.__ui.setupUi(self)
self.data_manager = DataManagerUi()
...

if __name__ == "__main__":
# 主界面程序
app = QtWidgets.QApplication(sys.argv)
baseWidget = MainUi()
baseWidget.data_manager.dao_service.signal_str.connect(baseWidget.data_manager.sign_str_proc)