Python证券信息获取实例_pyqt5

证券信息获取实例—PYQT5

一、分析

首先使用baostock获取所有证券信息,这里主要获取证券编号和证券名称。

设计用户交互界面,交互界面应有按钮来进行操作,再单击操作按钮后,应有表格来显示结果。

二、后台数据获取

采用baostock获取证券基本信息,原理之前的文章已经说明,不再赘述。

1、代码

get_stock_lis.py

获取前一天的证券列表,写入csv文件

import baostock as bs
import pandas as pd
import time
import datetime
import openpyxl

#指定日期所有股票

#获取 证券代码查询,返回所有股票代码的值
def get_query_all_stock(day):
    rs = bs.query_all_stock(day=day)     #需要查询日期,空默认当前日期
    print('query_all_stock respond error_code:'+rs.error_code)
    print('query_all_stock respond error_msg:'+rs.error_msg)
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())   #证券代码,交易状态 1正常交易2停牌, 证券名称
    result = pd.DataFrame(data_list, columns=rs.fields)
    return result


if __name__ == '__main__':
    now = datetime.date.today()  # 今天
    oneday = datetime.timedelta(days=1)
    yeday=str(now-7*oneday)
    now = str(now)
    date_search = '2019-02-25'
    lg = bs.login()
    result = get_query_all_stock(date_search)   #股票代码所有信息
    file_name = 'excel_data/'+'stock_data'+date_search+'.csv'
    print(file_name)
    result.to_csv(file_name)
    bs.logout()

2、获取的数据

stock_data2022-05-18.csv

数据是5月18号获取的,以该名字命名

前91条为北交所证券,baostock没有信息,所以舍弃

三、界面设计

界面设计采用pyqt5,先用qtdesiginer设计界面,界面设计流程见之前的文章

继承界面类,复写,案例实现。

1、qtdesiginer

2、代码

qtdesiginer生成的代码

2.1、Scode_Form.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Scode_Form.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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_Scode_Form(object):
    def setupUi(self, Scode_Form):
        Scode_Form.setObjectName("Scode_Form")
        Scode_Form.resize(655, 834)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/ico/static/test.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Scode_Form.setWindowIcon(icon)
        self.verticalLayout = QtWidgets.QVBoxLayout(Scode_Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame = QtWidgets.QFrame(Scode_Form)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.gridLayout = QtWidgets.QGridLayout(self.frame)
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setStyleSheet("font: 16pt \"Adobe 仿宋 Std R\";")
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.frame)
        self.label_3.setStyleSheet("image: url(:/jpg/static/test4.jpg);")
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 0, 1, 2, 1)
        self.label_2 = QtWidgets.QLabel(self.frame)
        self.label_2.setStyleSheet("font: 16pt \"Adobe 仿宋 Std R\";")
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.verticalLayout.addWidget(self.frame)
        self.tableWidget = QtWidgets.QTableWidget(Scode_Form)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(200)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(100)
        self.tableWidget.verticalHeader().setDefaultSectionSize(50)
        self.tableWidget.verticalHeader().setMinimumSectionSize(30)
        #禁止修改
        self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.verticalLayout.addWidget(self.tableWidget)
        self.pushButton = QtWidgets.QPushButton(Scode_Form)
        self.pushButton.setStyleSheet("font: 1z4pt \"Adobe 黑体 Std R\";")
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.verticalLayout.setStretch(0, 3)
        self.verticalLayout.setStretch(1, 10)
        self.verticalLayout.setStretch(2, 1)

        self.retranslateUi(Scode_Form)
        QtCore.QMetaObject.connectSlotsByName(Scode_Form)

    def retranslateUi(self, Scode_Form):
        _translate = QtCore.QCoreApplication.translate
        Scode_Form.setWindowTitle(_translate("Scode_Form", "查询昨日证券代码"))
        self.label.setText(_translate("Scode_Form", "证券代码查询"))
        self.label_2.setText(_translate("Scode_Form", "哪有小孩天天哭"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Scode_Form", "证券编号"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Scode_Form", "交易状态"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Scode_Form", "证券名称"))
        self.pushButton.setText(_translate("Scode_Form", "昨天的证券信息"))
import pic_rc

2.2、Get_Scode.py

复写实例化窗口类

import sys
from PyQt5 import QtCore
#from PyQt5.QtWidgets import QApplication,QMainWindow,QDialog,QFrame
from PyQt5.QtWidgets import *
from Scode_Form import *
import pandas as pd
import os
#主界面显示是Form,所以在QtDesinger里面新建窗口的时候,用模板Widget
#继承的是QFrame, 画面就能正常显示了。
#如果创建窗口的时候用的模板是Main Window,才应该是继承QMainWindow。class Mymainwin(QMainWindow, Ui_Scode_Form):
#两个库实现show()的过程有区别

class Mymainwin(QFrame, Ui_Scode_Form):
    def __init__(self, parent=None):        #最上层窗体
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.show_result)
        self.toli = [['a',1,'d'],['b',0,'c']]

    def show_result(self):
        self.tableWidget.setRowCount(0)
        self.tableWidget.clearContents()
        path_1 = os.path.dirname(os.getcwd())
        path_2 = path_1 + '\stock_deal\excel_data\stock_data2022-05-18.csv'
        #self.df = pd.read_csv('..\stock_deal\excel_data\stock_data2022-05-18.csv')
        self.df = pd.read_csv(path_2)
        self.df = self.df[91:]      #91之前全是北京交易所的
        for i in range(0, self.df.shape[0]):
            row = self.tableWidget.rowCount()
            self.tableWidget.insertRow(row)
            for j in range(1, self.df.shape[1]):
                try:
                    #print(str(self.df.iloc[i, j]))
                    ite = QTableWidgetItem(str(self.df.iloc[i, j]))
                    #print(ite)
                    self.tableWidget.setItem(row,j-1,ite)
                except:
                    print('pass')

if __name__ == '__main__':
    try:
        app = QApplication(sys.argv)
        main = Mymainwin()
        main.show()
        sys.exit(app.exec_())
    except:
        print('error')
        a = input()

四、整合

pyuic打包成exe文件

效果

单击按钮,显示证券信息

posted @ 2022-07-21 09:21  Saint_Z  阅读(686)  评论(0)    收藏  举报