在pyqt5中我们通常需要在子线程中处理耗时操作如网络请求,在主线程中更新UI界面,下面是一个简单的例子,运行界面如下

import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QIcon, QCloseEvent
from PyQt5.QtWidgets import *
class MyThread(QThread):
send_singal = pyqtSignal(int)
def run(self):
for i in range(1, 5):
print("current id is: ", self.currentThreadId())
self.send_singal.emit(i)
QThread.sleep(1)
class Window(QWidget):
def __init__(self,*args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
self.resize(600, 400)
self.move(660,300)
self.setWindowTitle("标哥测试")
self.setUI()
self.intilogic()
def setUI(self):
self.layout = QVBoxLayout()
self.progress = QProgressBar()
self.progress.setRange(0, 100)
print(self.progress.width())
self.button = QPushButton("点击开始线程")
self.button.clicked.connect(self.start)
self.layout.addWidget(self.progress)
self.layout.addWidget(self.button)
self.setLayout(self.layout)
def intilogic(self):
self.thread = MyThread(self)
self.thread.finished.connect(self.thread.deleteLater)
self.thread.send_singal.connect(self.change_value)
self.button.clicked.connect(self.start)
def change_value(self, value):
self.progress.setValue(value)
def start(self):
print('当前主线程ID: ', int(QThread.currentThreadId()))
try:
self.thread.start()
except:
print("子线程开启失败")
def closeEvent(self, a0: QCloseEvent):
print("关闭")
super(Window, self).closeEvent(a0)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)