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.
"""
self.start_work_1()
@pyqtSlot()
def on_pushButton_4_clicked(self):
"""
Slot documentation goes here.
"""
self.stop_work_1()
@pyqtSlot()
def on_pushButton_2_clicked(self):
"""
Slot documentation goes here.
"""
self.start_work_2()
@pyqtSlot()
def on_pushButton_5_clicked(self):
"""
Slot documentation goes here.
"""
self.stop_work_2()
@pyqtSlot()
def on_pushButton_3_clicked(self):
"""
Slot documentation goes here.
"""
self.start_work_3()
@pyqtSlot()
def on_pushButton_6_clicked(self):
"""
Slot documentation goes here.
"""
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)
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)
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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)