欢迎访问宙启技术站
智能推送

PyQt5.QtCore.QThread__init__()的构造器解读

发布时间:2023-12-15 23:12:06

在PyQt5中,QThread类是Qt核心模块中提供的线程类之一。它是一个用于基于多线程编程的管理线程的类,通过继承QThread类,可以创建自定义的线程类,并重写run()方法来实现线程的功能。

QThread类的构造器是__init__()方法,它用于初始化线程对象。QThread类的构造器有以下几种重载形式:

1.

此构造器创建一个新的线程对象,可传入一个可选的QObject对象parent作为线程的父对象。当线程对象被设置为另一个对象的子对象时,当父对象被删除时,线程对象也会自动删除。例如:

import sys
from PyQt5.QtCore import QThread

class MyThread(QThread):
    def __init__(self, parent=None):
        super().__init__(parent)

thread = MyThread()
print(thread.parent())  # Output: None

2.

此构造器接受一个可调用的对象(如函数、方法或Lambda函数)。它创建一个新的线程对象,并将可调用对象作为run()方法的实现。例如:

import sys
from PyQt5.QtCore import QThread

def my_task():
    for i in range(1, 5):
        print("Running task", i)

thread = QThread(my_task)
thread.start()

3.

此构造器被保护起来,一般情况下不需要直接调用。

作为一个例子,我们可以创建一个自定义的线程类,继承QThread类,重写run()方法实现线程功能,然后在Main函数中使用该线程。

import sys
from PyQt5.QtCore import QThread

# 自定义线程类
class MyThread(QThread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        for i in range(1, 5):
            print(self.name, "is running task", i)

# Main函数
if __name__ == '__main__':
    # 创建线程对象
    thread1 = MyThread("Thread 1")
    thread2 = MyThread("Thread 2")

    # 启动线程
    thread1.start()
    thread2.start()

    # 等待线程完成
    thread1.wait()
    thread2.wait()

    sys.exit()

在上面的例子中,我们先定义了一个自定义的线程类MyThread,它继承自QThread类,并重写了run()方法。run()方法是线程的实际功能的实现,可以在其中实现任何我们想要的任务。然后,在Main函数中,我们创建了两个线程对象thread1和thread2,并通过start()方法启动它们。最后,使用wait()方法等待线程完成,然后通过sys.exit()退出程序。

总结:QThread类的构造器__init__()用于初始化一个线程对象。通过重写run()方法,可以实现线程的功能。