def create_job_01_save_stock_day(self): # 🛠todo 继承QWidget , 写一个类, 里面有 进度条, checkbox ,和绑定到线程 self.qCheckBoxJob01_save_stock_day = QtWidgets.QCheckBox(self) self.qCheckBoxJob01_save_stock_day.setText("JOB01 日线数据 📊") self.qProgressJob01_save_stock_day = QtWidgets.QProgressBar(self) self.qProgressJob01_save_stock_day.setMaximum(100) # 🛠todo 应该有更加好的实现方式, 把progress bar 绑定到 任务对象中,这样写实在是太粗糙了。 # 把job 对象 绑定到界面中 , 继承 QCheckBox 把相关到对象线程 和 widget 绑定。 self.job01_save_stock_day = QA_GUI_DateFetch_SU_job01_stock_day() self.job01_save_stock_day.setLoggingUIWidget(self.logDisplay) self.job01_save_stock_day.setProgressUIWidget( self.qProgressJob01_save_stock_day) self.job01_save_stock_day.setCheckboxUIWidget( self.qCheckBoxJob01_save_stock_day) self.job01_save_stock_day.connectSignalSlot() # 🛠todo 进一步封装 hardcode 1 2 3 不是一种好的的做法 self.qCheckboxWidgetList.append(self.qCheckBoxJob01_save_stock_day) self.qProgressWidgetList.append(self.qProgressJob01_save_stock_day) self.allSubJobList.append(self.job01_save_stock_day) # 🛠todo 进一步封装 hardcode 1 2 3 不是一种好的的做法 self.taskListLayout.addWidget(self.qCheckBoxJob01_save_stock_day) self.taskListLayout.addWidget(self.qProgressJob01_save_stock_day)
def create_job_11_save_stock_transaction(self): self.qCheckBoxJob11_save_stock_transaction = QtWidgets.QCheckBox(self) self.qCheckBoxJob11_save_stock_transaction.setText( "JOB11 股票3秒的tick数据 📊") self.qProgressJob11_save_stock_transaction = QtWidgets.QProgressBar( self) self.qProgressJob11_save_stock_transaction.setMaximum( 10000) # 最小变动单位 0.01 self.job11_save_stock_transaction = QA_GUI_DateFetch_SU_job11_stock_transaction( ) self.job11_save_stock_transaction.setLoggingUIWidget(self.logDisplay) self.job11_save_stock_transaction.setProgressUIWidget( self.qProgressJob11_save_stock_transaction) self.job11_save_stock_transaction.setCheckboxUIWidget( self.qCheckBoxJob11_save_stock_transaction) self.job11_save_stock_transaction.connectSignalSlot() self.qCheckboxWidgetList.append( self.qCheckBoxJob11_save_stock_transaction) self.qProgressWidgetList.append( self.qProgressJob11_save_stock_transaction) self.allSubJobList.append(self.job11_save_stock_transaction) self.taskListLayout.addWidget( self.qCheckBoxJob11_save_stock_transaction) self.taskListLayout.addWidget( self.qProgressJob11_save_stock_transaction)
def create_job_02_save_stock_xdxr(self): self.qCheckBoxJob02_save_stock_xdxr = QtWidgets.QCheckBox(self) self.qCheckBoxJob02_save_stock_xdxr.setText("JOB02 除权除息数据 📊") self.qProgressJob02_save_stock_xdxr = QtWidgets.QProgressBar(self) self.qProgressJob02_save_stock_xdxr.setMaximum(100) self.job02_save_stock_xdxr = QA_GUI_DateFetch_SU_job02_stock_xdxr() self.job02_save_stock_xdxr.setLoggingUIWidget(self.logDisplay) self.job02_save_stock_xdxr.setProgressUIWidget( self.qProgressJob02_save_stock_xdxr) self.job02_save_stock_xdxr.setCheckboxUIWidget( self.qCheckBoxJob02_save_stock_xdxr) self.job02_save_stock_xdxr.connectSignalSlot() self.qCheckboxWidgetList.append(self.qCheckBoxJob02_save_stock_xdxr) self.qProgressWidgetList.append(self.qProgressJob02_save_stock_xdxr) self.allSubJobList.append(self.job02_save_stock_xdxr) self.taskListLayout.addWidget(self.qCheckBoxJob02_save_stock_xdxr) self.taskListLayout.addWidget(self.qProgressJob02_save_stock_xdxr)
def create_job_10_save_stock_info(self): self.qCheckBoxJob10_save_stock_info = QtWidgets.QCheckBox(self) self.qCheckBoxJob10_save_stock_info.setText("JOB10 股票基本数据 📊") self.qProgressJob10_save_stock_info = QtWidgets.QProgressBar(self) self.qProgressJob10_save_stock_info.setMaximum(10000) # 最小变动单位 0.01 self.job10_save_stock_info = QA_GUI_DateFetch_SU_job10_stock_info() self.job10_save_stock_info.setLoggingUIWidget(self.logDisplay) self.job10_save_stock_info.setProgressUIWidget( self.qProgressJob10_save_stock_info) self.job10_save_stock_info.setCheckboxUIWidget( self.qCheckBoxJob10_save_stock_info) self.job10_save_stock_info.connectSignalSlot() self.qCheckboxWidgetList.append(self.qCheckBoxJob10_save_stock_info) self.qProgressWidgetList.append(self.qProgressJob10_save_stock_info) self.allSubJobList.append(self.job10_save_stock_info) self.taskListLayout.addWidget(self.qCheckBoxJob10_save_stock_info) self.taskListLayout.addWidget(self.qProgressJob10_save_stock_info)
def create_job_07_save_etf_min(self): self.qCheckBoxJob07_save_etf_min = QtWidgets.QCheckBox(self) self.qCheckBoxJob07_save_etf_min.setText("JOB07 ETF分钟数据 📊") self.qProgressJob07_save_etf_min = QtWidgets.QProgressBar(self) self.qProgressJob07_save_etf_min.setMaximum(10000) # 最小变动单位 0.01 self.job07_save_etf_min = QA_GUI_DateFetch_SU_job07_etf_min() self.job07_save_etf_min.setLoggingUIWidget(self.logDisplay) self.job07_save_etf_min.setProgressUIWidget( self.qProgressJob07_save_etf_min) self.job07_save_etf_min.setCheckboxUIWidget( self.qCheckBoxJob07_save_etf_min) self.job07_save_etf_min.connectSignalSlot() self.qCheckboxWidgetList.append(self.qCheckBoxJob07_save_etf_min) self.qProgressWidgetList.append(self.qProgressJob07_save_etf_min) self.allSubJobList.append(self.job07_save_etf_min) self.taskListLayout.addWidget(self.qCheckBoxJob07_save_etf_min) self.taskListLayout.addWidget(self.qProgressJob07_save_etf_min)
def create_job_04_save_index_day(self): self.qCheckBoxJob04_save_index_day = QtWidgets.QCheckBox(self) self.qCheckBoxJob04_save_index_day.setText("JOB04 指数日线数据 📊") self.qProgressJob04_save_index_day = QtWidgets.QProgressBar(self) self.qProgressJob04_save_index_day.setMaximum(10000) # 最小变动单位 0.01 self.job04_save_index_day = QA_GUI_DateFetch_SU_job04_index_day() self.job04_save_index_day.setLoggingUIWidget(self.logDisplay) self.job04_save_index_day.setProgressUIWidget( self.qProgressJob04_save_index_day) self.job04_save_index_day.setCheckboxUIWidget( self.qCheckBoxJob04_save_index_day) self.job04_save_index_day.connectSignalSlot() self.qCheckboxWidgetList.append(self.qCheckBoxJob04_save_index_day) self.qProgressWidgetList.append(self.qProgressJob04_save_index_day) self.allSubJobList.append(self.job04_save_index_day) self.taskListLayout.addWidget(self.qCheckBoxJob04_save_index_day) self.taskListLayout.addWidget(self.qProgressJob04_save_index_day)
def create_job01_save_stock_week(self): self.qCheckBoxJob01_save_stock_week = QtWidgets.QCheckBox(self) self.qCheckBoxJob01_save_stock_week.setText("JOB01 周线数据 📊") self.qProgressJob01_save_stock_week = QtWidgets.QProgressBar(self) self.qProgressJob01_save_stock_week.setMaximum(100) # 🛠todo 不知道为何,QThread 继承的 都不执行 __init__ self.job01_save_stock_week = QA_GUI_DateFetch_SU_job01_stock_week() self.job01_save_stock_week.setLoggingUIWidget(self.logDisplay) self.job01_save_stock_week.setProgressUIWidget( self.qProgressJob01_save_stock_week) self.job01_save_stock_week.setCheckboxUIWidget( self.qCheckBoxJob01_save_stock_week) self.job01_save_stock_week.connectSignalSlot() self.qCheckboxWidgetList.append(self.qCheckBoxJob01_save_stock_week) self.qProgressWidgetList.append(self.qProgressJob01_save_stock_week) self.allSubJobList.append(self.job01_save_stock_week) self.taskListLayout.addWidget(self.qCheckBoxJob01_save_stock_week) self.taskListLayout.addWidget(self.qProgressJob01_save_stock_week)
def init_ui(self): """""" self.setWindowTitle("pytdx载入") # self.setFixedWidth(600) self.setWindowFlags((self.windowFlags() | QtCore.Qt.CustomizeWindowHint) & ~QtCore.Qt.WindowMaximizeButtonHint) hbox_layout = QtWidgets.QHBoxLayout() load_button = QtWidgets.QPushButton("载入数据.to_db") load_button.clicked.connect(self.load_data) to_csv_button = QtWidgets.QPushButton("载入数据.to_csv") to_csv_button.clicked.connect(self.load_data) self.symbol_type = QtWidgets.QLineEdit("L8") self.symbol_combo = QtWidgets.QComboBox() self.exchange_combo = QtWidgets.QComboBox() for i in Exchange: self.exchange_combo.addItem(str(i.name), i) self.exchange_combo.activated[str].connect(self.onExchangeActivated) self.interval_combo = QtWidgets.QComboBox() for i in Interval: self.interval_combo.addItem(str(i.name), i) self.datetime_edit = QtWidgets.QLineEdit("Datetime") self.open_edit = QtWidgets.QLineEdit("Open") self.high_edit = QtWidgets.QLineEdit("High") self.low_edit = QtWidgets.QLineEdit("Low") self.close_edit = QtWidgets.QLineEdit("Close") self.volume_edit = QtWidgets.QLineEdit("Volume") self.open_interest_edit = QtWidgets.QLineEdit("OpenInterest") self.format_edit = QtWidgets.QLineEdit("%Y-%m-%d %H:%M:%S") info_label = QtWidgets.QLabel("合约信息") info_label.setAlignment(QtCore.Qt.AlignCenter) head_label = QtWidgets.QLabel("表头信息") head_label.setAlignment(QtCore.Qt.AlignCenter) format_label = QtWidgets.QLabel("格式信息") format_label.setAlignment(QtCore.Qt.AlignCenter) save_progress_label = QtWidgets.QLabel("保存进度信息") save_progress_label.setAlignment(QtCore.Qt.AlignCenter) save_progress_bar = QtWidgets.QProgressBar() save_progress_bar.setAlignment(QtCore.Qt.AlignCenter) self.progress_bar_dict['save_progress_bar'] = save_progress_bar form_left = QtWidgets.QFormLayout() form_left.addRow(QtWidgets.QLabel()) form_left.addRow(info_label) form_left.addRow("交易所", self.exchange_combo) form_left.addRow("代码", self.symbol_combo) form_left.addRow("类型\n(L8主连/L9指数/2006)", self.symbol_type) form_left.addRow("周期", self.interval_combo) form_left.addRow(QtWidgets.QLabel()) form_left.addRow(head_label) form_left.addRow("时间戳", self.datetime_edit) form_left.addRow("开盘价", self.open_edit) form_left.addRow("最高价", self.high_edit) form_left.addRow("最低价", self.low_edit) form_left.addRow("收盘价", self.close_edit) form_left.addRow("成交量", self.volume_edit) form_left.addRow("持仓量", self.open_interest_edit) form_left.addRow(QtWidgets.QLabel()) form_left.addRow(format_label) form_left.addRow("时间格式", self.format_edit) form_left.addRow(QtWidgets.QLabel()) form_left.addRow(save_progress_label) form_left.addRow(save_progress_bar) form_left.addRow(load_button) form_left.addRow(to_csv_button) form_left_widget = QtWidgets.QWidget() form_left_widget.setLayout(form_left) form_right_layout = QtWidgets.QFormLayout() # form_right_layout.addRow(QtWidgets.QLabel()) # form_right_layout.addRow(info_label) # form_right_layout.addRow("交易所", self.exchange_combo) # form_right_layout.addRow("代码", self.symbol_combo) # form_right_layout.addRow("类型\n(L8主连/L9指数/2006)", self.symbol_type) # form_right_layout.addRow("周期", self.interval_combo) # form_right_layout.addRow(QtWidgets.QLabel()) # form_right_layout.addRow(head_label) # form_right_layout.addRow("时间戳", self.datetime_edit) # form_right_layout.addRow("开盘价", self.open_edit) # form_right_layout.addRow("最高价", self.high_edit) # form_right_layout.addRow("最低价", self.low_edit) # form_right_layout.addRow("收盘价", self.close_edit) # form_right_layout.addRow("成交量", self.volume_edit) # form_right_layout.addRow("持仓量", self.open_interest_edit) form_right_widget = QtWidgets.QWidget() form_right_widget.setLayout(form_right_layout) hbox_layout.addStretch(1) hbox_layout.addWidget(form_left_widget) hbox_layout.addWidget(form_right_widget) self.setLayout(hbox_layout)
def init_ui(self): """""" self.setWindowTitle("CSV载入") self.setFixedWidth(300) self.setWindowFlags( (self.windowFlags() | QtCore.Qt.CustomizeWindowHint) & ~QtCore.Qt.WindowMaximizeButtonHint) file_button = QtWidgets.QPushButton("选择文件") file_button.clicked.connect(self.select_file) file_dir_button = QtWidgets.QPushButton("选择文件夹") file_dir_button.clicked.connect(self.select_file_dir) load_button = QtWidgets.QPushButton("载入数据") load_button.clicked.connect(self.load_data) self.file_edit = QtWidgets.QLineEdit() self.symbol_edit = QtWidgets.QLineEdit() self.exchange_combo = QtWidgets.QComboBox() for i in Exchange: self.exchange_combo.addItem(str(i.name), i) self.interval_combo = QtWidgets.QComboBox() for i in Interval: self.interval_combo.addItem(str(i.name), i) self.datetime_edit = QtWidgets.QLineEdit("Datetime") self.open_edit = QtWidgets.QLineEdit("Open") self.high_edit = QtWidgets.QLineEdit("High") self.low_edit = QtWidgets.QLineEdit("Low") self.close_edit = QtWidgets.QLineEdit("Close") self.volume_edit = QtWidgets.QLineEdit("Volume") self.open_interest_edit = QtWidgets.QLineEdit("OpenInterest") self.format_edit = QtWidgets.QLineEdit("%Y-%m-%d %H:%M:%S") info_label = QtWidgets.QLabel("合约信息") info_label.setAlignment(QtCore.Qt.AlignCenter) head_label = QtWidgets.QLabel("表头信息") head_label.setAlignment(QtCore.Qt.AlignCenter) format_label = QtWidgets.QLabel("格式信息") format_label.setAlignment(QtCore.Qt.AlignCenter) save_progress_label = QtWidgets.QLabel("保存进度信息") save_progress_label.setAlignment(QtCore.Qt.AlignCenter) save_progress_bar = QtWidgets.QProgressBar() save_progress_bar.setAlignment(QtCore.Qt.AlignCenter) self.progress_bar_dict['save_progress_bar'] = save_progress_bar form = QtWidgets.QFormLayout() form.addRow(file_button, self.file_edit) form.addRow(file_dir_button, self.file_edit) form.addRow(QtWidgets.QLabel()) form.addRow(info_label) form.addRow("代码", self.symbol_edit) form.addRow("交易所", self.exchange_combo) form.addRow("周期", self.interval_combo) form.addRow(QtWidgets.QLabel()) form.addRow(head_label) form.addRow("时间戳", self.datetime_edit) form.addRow("开盘价", self.open_edit) form.addRow("最高价", self.high_edit) form.addRow("最低价", self.low_edit) form.addRow("收盘价", self.close_edit) form.addRow("成交量", self.volume_edit) form.addRow("持仓量", self.open_interest_edit) form.addRow(QtWidgets.QLabel()) form.addRow(format_label) form.addRow("时间格式", self.format_edit) form.addRow(QtWidgets.QLabel()) form.addRow(save_progress_label) form.addRow(save_progress_bar) form.addRow(load_button) self.setLayout(form)
def initUI(self): ''' |--------------|------------| | | | | | | |task list1 | log display| |task list1 | | |task list1 | | |task list1 | | |------------- |------------| | button | |---------------------------| :return: ''' self.setWindowIconText("获取数据任务列表") self.setObjectName("data_maintenance") QtCore.QMetaObject.connectSlotsByName(self) # 下面将输出重定向到textEdit中 sys.stdout = EmittingStream(textWritten=self.outputWritten) sys.stderr = EmittingStream(textWritten=self.outputWritten) # 🛠todo 日志显示,用table view list 加入搜索的功能, 行号等, 彩色显示, self.logDisplay = QtWidgets.QTableWidget(self) self.logDisplay.setObjectName("tableForLog") self.logDisplay.setColumnCount(2) self.logDisplay.setHorizontalHeaderLabels(['日志内容', '来源']) self.logDisplay.setColumnWidth(0, 700) self.logDisplay.setColumnWidth(1, 100) self.gridLayut = QtWidgets.QGridLayout() self.taskListLayout = QtWidgets.QVBoxLayout() self.logListLayout = QtWidgets.QVBoxLayout() self.buttonListLayout = QtWidgets.QHBoxLayout() self.gridLayut.addLayout(self.taskListLayout, 0, 0, 1, 1) self.gridLayut.addLayout(self.logListLayout, 0, 1, 1, 1) self.gridLayut.setColumnMinimumWidth(1, 1400) ''' void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()) This is an overloaded function. This version adds the layout layout to the cell grid, spanning multiple rows/columns. The cell will start at row, column spanning rowSpan rows and columnSpan columns. If rowSpan and/or columnSpan is -1, then the layout will extend to the bottom and/or right edge, respectively. ''' self.gridLayut.addLayout(self.buttonListLayout, 1, 0, 1, 3) #🛠todo QT 报错 QWidget::setLayout: Attempting to set QLayout "" on QWidget "", which already has a layout self.setLayout(self.gridLayut) self.qCheckboxWidgetList = [] self.qProgressWidgetList = [] self.allSubJobList = [] # 🛠todo this is really stupid 01 02 03 04,... should use template ? does python have some template feature like c++ ####################################################################### self.create_job_08_save_stock_list() ####################################################################### self.create_job_09_save_stock_block() ####################################################################### self.create_job_10_save_stock_info() ####################################################################### self.create_job_01_save_stock_day() ####################################################################### self.create_job_02_save_stock_xdxr() ####################################################################### self.create_job_03_save_stock_min() ####################################################################### self.create_job_04_save_index_day() ####################################################################### self.create_job_05_save_index_min() ####################################################################### self.create_job_06_save_etf_day() ####################################################################### self.create_job_07_save_etf_min() ####################################################################### self.create_job_11_save_stock_transaction() ####################################################################### self.selectedSubTask = QA_GUI_Selected_TaskQueue(self.logDisplay) self.selectedSubTask.trigger_all_task_start.connect( self.uiAllTaskStart) self.selectedSubTask.trigger_all_task_done.connect(self.uiAllTaskDone) ####################################################################### self.logListLayout.addWidget(self.logDisplay) self.bntExecute = QtWidgets.QPushButton(self) self.bntExecute.setText("执行选中的任务 🐌") self.buttonListLayout.addWidget(self.bntExecute) # 🛠todo 没有实现! self.bntStopTack = QtWidgets.QPushButton(self) self.bntStopTack.setText("停止执行任务 🚫") self.buttonListLayout.addWidget(self.bntStopTack) self.bntClearLog = QtWidgets.QPushButton(self) self.bntClearLog.setText("清除日志 🗑") self.buttonListLayout.addWidget(self.bntClearLog) self.bntExecute.clicked.connect(self.doSelectedTask) self.bntStopTack.clicked.connect(self.doStopTask) layout = QtWidgets.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignLeft) layout.addRow("保存日线数据 ", QtWidgets.QProgressBar(self)) layout.addRow("保存日除权出息数据 ", QtWidgets.QProgressBar(self)) layout.addRow("保存分钟线数据", QtWidgets.QProgressBar(self)) layout.addRow("保存指数数据", QtWidgets.QProgressBar(self)) layout.addRow("保存指数线数据 ", QtWidgets.QProgressBar(self)) layout.addRow("保存ETF日线数据 ", QtWidgets.QProgressBar(self)) layout.addRow("保存ET分钟数据", QtWidgets.QProgressBar(self)) layout.addRow("保存股票列表", QtWidgets.QProgressBar(self)) layout.addRow("保存板块", QtWidgets.QProgressBar(self)) layout.addRow("保存tushare数据接口获取的股票列表", QtWidgets.QProgressBar(self)) layout.addRow("保存高级财务数据(自1996年开始)", QtWidgets.QProgressBar(self)) layout.addRow("保存50ETF期权日线数据(不包括已经摘牌的数据)", QtWidgets.QProgressBar(self)) qPushBnt = QtWidgets.QPushButton(self) qPushBnt.setText("开始执行") layout.addRow("选中需要执行的任务", qPushBnt)