|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
两个py文件
一个ui的ui_Widget.py
- # -*- coding: utf-8 -*-
- # Form implementation generated from reading ui file 'Widget.ui'
- #
- # Created by: PyQt5 UI code generator 5.15.1
- #
- # 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_Widget(object):
- def setupUi(self, Widget):
- Widget.setObjectName("Widget")
- Widget.resize(710, 593)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(Widget.sizePolicy().hasHeightForWidth())
- Widget.setSizePolicy(sizePolicy)
- font = QtGui.QFont()
- font.setPointSize(16)
- Widget.setFont(font)
- self._2 = QtWidgets.QVBoxLayout(Widget)
- self._2.setContentsMargins(5, 5, 5, 5)
- self._2.setSpacing(6)
- self._2.setObjectName("_2")
- self.label = QtWidgets.QLabel(Widget)
- self.label.setEnabled(True)
- self.label.setText("")
- self.label.setPixmap(QtGui.QPixmap("22.jpg"))
- self.label.setObjectName("label")
- self._2.addWidget(self.label)
- self.groupBox_2 = QtWidgets.QGroupBox(Widget)
- self.groupBox_2.setObjectName("groupBox_2")
- self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox_2)
- self.verticalLayout.setContentsMargins(9, 9, 9, 9)
- self.verticalLayout.setSpacing(6)
- self.verticalLayout.setObjectName("verticalLayout")
- self.lineEdit = QtWidgets.QLineEdit(self.groupBox_2)
- self.lineEdit.setClearButtonEnabled(True)
- self.lineEdit.setObjectName("lineEdit")
- self.verticalLayout.addWidget(self.lineEdit)
- self._2.addWidget(self.groupBox_2)
- self.horizontalLayout = QtWidgets.QHBoxLayout()
- self.horizontalLayout.setSpacing(4)
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.groupBox = QtWidgets.QGroupBox(Widget)
- self.groupBox.setObjectName("groupBox")
- self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
- self.gridLayout.setContentsMargins(11, 11, 11, 11)
- self.gridLayout.setSpacing(6)
- self.gridLayout.setObjectName("gridLayout")
- self.comboBox = QtWidgets.QComboBox(self.groupBox)
- self.comboBox.setEditable(False)
- self.comboBox.setObjectName("comboBox")
- self.gridLayout.addWidget(self.comboBox, 1, 0, 1, 3)
- self.btnIniItems = QtWidgets.QPushButton(self.groupBox)
- self.btnIniItems.setObjectName("btnIniItems")
- self.gridLayout.addWidget(self.btnIniItems, 0, 0, 1, 1)
- self.btnClearItems = QtWidgets.QPushButton(self.groupBox)
- self.btnClearItems.setObjectName("btnClearItems")
- self.gridLayout.addWidget(self.btnClearItems, 0, 1, 1, 1)
- self.btnOkItems = QtWidgets.QPushButton(self.groupBox)
- self.btnOkItems.setStyleSheet("background-color: rgb(255, 0, 0);\n"
- "font: 16pt "MS Shell Dlg 2";")
- self.btnOkItems.setObjectName("btnOkItems")
- self.gridLayout.addWidget(self.btnOkItems, 0, 2, 1, 1)
- self.horizontalLayout.addWidget(self.groupBox)
- self._2.addLayout(self.horizontalLayout)
- self.plainTextEdit = QtWidgets.QPlainTextEdit(Widget)
- self.plainTextEdit.setObjectName("plainTextEdit")
- self._2.addWidget(self.plainTextEdit)
- self.retranslateUi(Widget)
- self.comboBox.setCurrentIndex(-1)
- QtCore.QMetaObject.connectSlotsByName(Widget)
- def retranslateUi(self, Widget):
- _translate = QtCore.QCoreApplication.translate
- Widget.setWindowTitle(_translate("Widget", "Demo3_6 ComboBox"))
- self.groupBox_2.setTitle(_translate("Widget", "选择的工序如下"))
- self.groupBox.setTitle(_translate("Widget", "选择导出数据的工序"))
- self.btnIniItems.setText(_translate("Widget", "初始化列表"))
- self.btnClearItems.setText(_translate("Widget", "清除列表"))
- self.btnOkItems.setText(_translate("Widget", "确定"))
复制代码
第二个py,文件myWidget.py
- import sys
- from PyQt5.QtWidgets import QApplication, QWidget
- from PyQt5.QtCore import pyqtSlot
- from ui_Widget import Ui_Widget #ui界面
- import itp_drawing as drawing #函数1
- import itp_bunching as bunching #函数2
- import itp_conductor as conductor #函数3
- import itp_extruder as extruder #函数4
- import itp_rubber as rubber #函数5
- import itp_ccv as ccv #函数6
- class QmyWidget(QWidget):
- def __init__(self, parent=None):
- super().__init__(parent) #调用父类构造函数,创建窗体
- self.ui=Ui_Widget() #创建UI对象
- self.ui.setupUi(self) #构造UI界面
- ## ==========由connectSlotsByName() 自动连接的槽函数====================
- def on_btnIniItems_clicked(self): ##“初始化列表”按钮
- self.ui.comboBox.clear() #清除列表
- provinces=["拉丝","束丝","导体","挤出","橡胶","ccv"] #列表数据
- for i in range(len(provinces)):
- self.ui.comboBox.addItem(provinces[i])
- def on_btnClearItems_clicked(self): ##“清除列表”按钮
- self.ui.comboBox.clear()
- def on_btnOkItems_clicked(self): ##“确定”按钮
- if self.ui.lineEdit.text().strip()=='拉丝':
- self.ui.plainTextEdit.clear()
- drawing.concat_file()
- self.ui.plainTextEdit.insertPlainText('拉丝数据导出完毕\n==========\n')
- elif self.ui.lineEdit.text().strip()=='束丝':
- self.ui.plainTextEdit.clear()
- bunching.read_bunching()
- self.ui.plainTextEdit.insertPlainText('束丝数据导出完毕\n==========\n')
- elif self.ui.lineEdit.text().strip() == '导体':
- self.ui.plainTextEdit.clear()
- conductor.concat_file()
- self.ui.plainTextEdit.insertPlainText('导体数据导出完毕\n==========\n')
- elif self.ui.lineEdit.text().strip()=='挤出':
- self.ui.plainTextEdit.clear()
- extruder.concat_file()
- self.ui.plainTextEdit.insertPlainText('挤出数据导出完毕\n==========\n')
- elif self.ui.lineEdit.text().strip()=='橡胶':
- self.ui.plainTextEdit.clear()
- rubber.concat_file()
- self.ui.plainTextEdit.insertPlainText('橡胶数据导出完毕\n==========\n')
- elif self.ui.lineEdit.text().strip()=='ccv':
- self.ui.plainTextEdit.clear()
- ccv.concat_file()
- self.ui.plainTextEdit.insertPlainText('CCV数据导出完毕\n==========\n')
- else:
- self.ui.plainTextEdit.clear()
- self.ui.plainTextEdit.insertPlainText('请选择正确的工序!!!\n==========\n')
- @pyqtSlot(str) ##“简单的ComboBox”的当前项变化
- def on_comboBox_currentIndexChanged(self,curText):
- self.ui.lineEdit.setText(curText)
- ## ===========窗体测试程序 ================================
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- form=QmyWidget()
- form.show()
- sys.exit(app.exec_())
复制代码
现在的问题是,6个函数,选中某一个后,由于函数读取数据文本比较耗时,导致界面卡。
如何改成多线程模式?
比如把6个函数改成6个checkbutton,选中几个就新开几个线程,且主界面不死。
rsj0315 发表于 2021-2-25 13:25
我先写了一个,是combox,选中后,点击按钮,然后开启线程,进行数据清洗。
你说的把dataframe发射出来 ... 不知道是不是必须的用信号发射出来才能实现。
还是我直接在线程中就把数据显示出来。
用信号发射出来不是必须的,但必须是在主线程中更新界面,也就是说你想在子线程中把数据显示出来是行不通的。
还是前面说过的两个方法:
1,类初始化时设置一个属性比如self.whatever = None。定义例如名为update_tableview的方法,方法内根据self.whatever的值设置tabwiew。定义一个清洗数据的方法getdata,方法内清洗数据并将最终结果赋值给self.whatever。实例化一个线程threadx(getdata),先将其finished信号连接至update_tableview,然后可以threadx.start(),当线程结束后,self.whatever的值已经变为清洗后的数据了,然后threadx的finished信号会触发update_tableview,update_tableview会根据self.whatever的值显示tableview。
2.在你的Thread1类中定义一个list类型的信号signal1=pyqtSignal(list),在处理完结果后,signal1.emit([dataFrame])将dataFrame包在列表内发射出去。在你的myWidget内定义一个接收一个参数a(即将被发射的[dataFrame])的显示tabwiew的方法update_tabview,update_tableview内根据a的值设置tableview。然后将Thread1的实例的signal1信号连接至update_tableview即可。
|
|