其他分享
首页 > 其他分享> > Qthread实例

Qthread实例

作者:互联网

pyqt5 Qthread实例

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(986, 245)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralWidget)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.groupBox = QtWidgets.QGroupBox(self.centralWidget)
        self.groupBox.setObjectName("groupBox")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.groupBox)
        self.pushButton.setStyleSheet("background-color: rgb(0, 255, 255);")
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_4 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_4.setStyleSheet("background-color: rgb(170, 85, 0);\n"
"color: rgb(255, 255, 255);")
        self.pushButton_4.setObjectName("pushButton_4")
        self.horizontalLayout.addWidget(self.pushButton_4)
        self.progressBar = QtWidgets.QProgressBar(self.groupBox)
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.horizontalLayout.addWidget(self.progressBar)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_2.setStyleSheet("background-color: rgb(0, 255, 255);")
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout_2.addWidget(self.pushButton_2)
        self.pushButton_5 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_5.setStyleSheet("background-color: rgb(170, 85, 0);\n"
"color: rgb(255, 255, 255);")
        self.pushButton_5.setObjectName("pushButton_5")
        self.horizontalLayout_2.addWidget(self.pushButton_5)
        self.progressBar_2 = QtWidgets.QProgressBar(self.groupBox)
        self.progressBar_2.setProperty("value", 24)
        self.progressBar_2.setObjectName("progressBar_2")
        self.horizontalLayout_2.addWidget(self.progressBar_2)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.pushButton_3 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_3.setStyleSheet("background-color: rgb(0, 255, 255);")
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalLayout_3.addWidget(self.pushButton_3)
        self.pushButton_6 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_6.setStyleSheet("background-color: rgb(170, 85, 0);\n"
"color: rgb(255, 255, 255);")
        self.pushButton_6.setObjectName("pushButton_6")
        self.horizontalLayout_3.addWidget(self.pushButton_6)
        self.progressBar_3 = QtWidgets.QProgressBar(self.groupBox)
        self.progressBar_3.setProperty("value", 24)
        self.progressBar_3.setObjectName("progressBar_3")
        self.horizontalLayout_3.addWidget(self.progressBar_3)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.verticalLayout_2.addWidget(self.groupBox)
        MainWindow.setCentralWidget(self.centralWidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.groupBox.setTitle(_translate("MainWindow", "Test_Thread"))
        self.pushButton.setText(_translate("MainWindow", "start_Thread 1"))
        self.pushButton_4.setText(_translate("MainWindow", "stop_Thread 1"))
        self.pushButton_2.setText(_translate("MainWindow", "start_Thread 2"))
        self.pushButton_5.setText(_translate("MainWindow", "stop_Thread 2"))
        self.pushButton_3.setText(_translate("MainWindow", "start_Thread 3"))
        self.pushButton_6.setText(_translate("MainWindow", "stop_Thread 3"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
from PyQt5.QtCore import pyqtSlot,QThread,pyqtSignal
from PyQt5.QtWidgets import QMainWindow

from Ui_testThread import Ui_MainWindow
import time

class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget (defaults to None)
        @type QWidget (optional)
        """
        super().__init__(parent)
        self.setupUi(self)
        self.thread={}
    
    @pyqtSlot()
    def on_pushButton_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.start_work_1()
    
    @pyqtSlot()
    def on_pushButton_4_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.stop_work_1()
    
    @pyqtSlot()
    def on_pushButton_2_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.start_work_2()
    
    @pyqtSlot()
    def on_pushButton_5_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.stop_work_2()
    
    @pyqtSlot()
    def on_pushButton_3_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.start_work_3()
    
    @pyqtSlot()
    def on_pushButton_6_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        self.stop_work_3()

    def start_work_1(self):
        self.thread[1]=ThreadClass(index=1)
        self.thread[1].start()
        self.thread[1]._signal.connect(self.function)
        self.pushButton.setEnabled(False)
    def start_work_2(self):
        self.thread[2]=ThreadClass(index=2)
        self.thread[2].start()
        self.thread[2]._signal.connect(self.function)
        self.pushButton_2.setEnabled(False)
    def start_work_3(self):
        self.thread[3]=ThreadClass(index=3)
        self.thread[3].start()
        self.thread[3]._signal.connect(self.function)
        self.pushButton_3.setEnabled(False)
    def stop_work_1(self):
        self.thread[1].stop()
        self.pushButton.setEnabled(True)
    def stop_work_2(self):
        self.thread[2].stop()
        self.pushButton_2.setEnabled(True)
    def stop_work_3(self):
        self.thread[3].stop()
        self.pushButton_3.setEnabled(True)

    #2槽函数,控制progressbar
    def function(self,cnt):
        index=self.sender().index
        if index==1:
            self.progressBar.setValue(cnt)
        if index==2:
            self.progressBar_2.setValue(cnt)
        if index==3:
            self.progressBar_3.setValue(cnt)

# 线程函数
class ThreadClass(QThread):
    _signal=pyqtSignal(int) #1信号
    def __init__(self,parent=None,index=0):
        super(ThreadClass, self).__init__(parent)
        self.index=index
        self.is_Running = True
    def run(self):
        print('start thread',self.index)
        cnt=0
        while (True):
            cnt += 1
            if cnt==99:
                cnt=0
            time.sleep(0.01)
            self._signal.emit(cnt)#线程持续发送信号
    def stop(self):
        self.is_Running = False
        print('stop threading ',self.index)
        self.terminate()

标签:horizontalLayout,self,MainWindow,实例,def,QtWidgets,pushButton,Qthread
来源: https://www.cnblogs.com/lyjedu/p/16323229.html