Pyqt 线程

#1、无参数线程后台运行
 self.thead1 = threading.Thread(target=self.hanshu_one, args=(self,))
 self.thead1.start()
# hanshu_one就是需要后台运行的函数名字

2、

import time
from PyQt5.QtCore import QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QProgressBar, QApplication, QPushButton, QDialog, QGridLayout
#线程1--普通线程
class Test_Work_1(QThread):#继承自QThread
    send_signal = pyqtSignal(int) #计划发送的信号
    def __init__(self):#初始化
        super(Test_Work_1, self).__init__()#父类初始化
    def run(self): #定义函数
        for i in range(101):#循环
            #print(i)
            self.send_signal.emit(i)#计划发送的信号
            time.sleep(0.01)#休眠
#线程2move----用
class Test_Work_2(QObject):
    send_signal = pyqtSignal(int) # #计划发送的信号
    send_finished = pyqtSignal() #结束的信号
    def __init__(self): #实例化时传入一些参数,以方便且正确-从最初就设置某些属性值,
		#对继承自父类的属性进行初始化,self=自己
		#先找到父类--父类的对象self转换为子类对象,--“被转换”的子类调用自己的__init__函数
        super(Test_Work_2, self).__init__()#
    def run(self):
        for i in range(101):
            print(i)
            self.send_signal.emit(i)#
            time.sleep(0.01)
        self.send_finished.emit()


class ThreadDialog(QDialog):
    def __init__(self):
        super(ThreadDialog, self).__init__()
        # MainWindow.resize(1313, 897)
        self.grid_layout = QGridLayout(self)
        self.grid_layout
        self.progress = QProgressBar(self)
        self.grid_layout.addWidget(self.progress, 0, 1, 1, 1)
        self.pushbutton_one = QPushButton('方法1:继承线程', self)
        self.grid_layout.addWidget(self.pushbutton_one, 2, 2, 1, 1)
        self.pushbutton2 = QPushButton('方法2:movetothread', self)
        self.grid_layout.addWidget(self.pushbutton2, 3, 3, 3, 3)

        self.pushbutton_one.clicked.connect(self.pushbutton_one_clicked)
        self.pushbutton2.clicked.connect(self.pushbutton2_clicked)

    def pushbutton_one_clicked(self):
        self.test_worker1 = Test_Work_1()#线程1实例化
        #发送信号与进度条连接
        self.test_worker1.send_signal.connect(self.progress.setValue)#
        #线程开始,实现持续信号发送
        self.test_worker1.start()

    def pushbutton2_clicked(self):
        self.test_worker2 = Test_Work_1()#实例化
        self.test_thread2 = QThread()#实例化
        self.test_worker2.moveToThread(self.test_thread2)#线程移送
        self.test_worker2.send_signal.connect(self.progress.setValue)#设置信号发送--与进度条联系
        self.test_worker2.send_finished.connect(self.test_worker2_finished)#设置信号--函数联系
        self.test_thread2.started.connect(self.test_worker2.run)#设置QThread的开始--与实例run联系
        self.test_thread2.start()#线程开始

    def test_worker2_finished(self):
        self.test_thread2.quit()
        self.test_thread2.wait()


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    thread_dialog = ThreadDialog()
    thread_dialog.show()
    app.exec_()

################################

self.newthread = newThread() # 实例化线程

    # #线程每个几秒把一个数发送给这个函数(=或者类里的一个方法)
    # self.newthread.signal_out.connect(self.DingDan_BianHao_build_test)  # 连接线程类中自定义信号槽到本类的自定义槽函数

```python
 self.newthread.start()  # 开启线程不是调用run函数,而是调用start函数

# 采用多线程操作
 self.model_process = model_thread()
# # 采用槽函数---把数值推送给连接的函数
self.model_process.model_signal_send.connect(self.DingDan_BianHao_build_ss)
 # 启动线程
self.model_process.start()


# 使用args传参threading.Thread(target=sing, args=(10, 100, 100))
# 使用kwargs传参threading.Thread(target=sing, kwargs={“a”: 10, “b”:100, “c”: 100})
# 同时args和kwargs传参threading.Thread(target=sing, args=(10,), kwargs={“b”: 100,“c”: 100})
        # self.thead1 = threading.Thread(target=self.DingDan_BianHao_build_ss, args=(self,))

################################
> https://blog.csdn.net/qq_36044523/article/details/108849365


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt 中,你可以使用 QThread 类来创建线程,并且可以通过信号和槽机制来实现线程与主线程之间的通信。下面是一个简单的示例代码: ```python import sys import time from PyQt5.QtCore import QThread, pyqtSignal, QTimer from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel class WorkerThread(QThread): finished = pyqtSignal() def __init__(self, parent=None): super(WorkerThread, self).__init__(parent) def run(self): # 执行耗时操作 time.sleep(5) self.finished.emit() class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.label = QLabel("等待线程结束") self.setCentralWidget(self.label) self.worker_thread = WorkerThread() self.worker_thread.finished.connect(self.on_worker_finished) self.worker_thread.start() def on_worker_finished(self): self.label.setText("线程已结束") if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个 WorkerThread 类来执行耗时操作,并在操作结束后发出 finished 信号。在主窗口中创建了一个 QLabel 控件来显示线程状态,然后在构造函数中创建了一个 WorkerThread 对象,并连接了 finished 信号到槽函数 on_worker_finished 中。最后启动了线程并显示主窗口。 当线程执行结束后,会发出 finished 信号,主窗口中的 on_worker_finished 槽函数会被调用,更新 QLabel 控件的文本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值