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文件

效果

单击按钮,显示证券信息


浙公网安备 33010602011771号