|  | 
 
| 
两个py文件
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  一个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即可。 | 
 |