阅读量:7
在PyQt中创建子窗口的线程可以使用QThread类。以下是一个简单的示例:
from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget class WorkerThread(QThread): finished = pyqtSignal() def run(self): # 在这里执行需要在子线程中运行的任务 # ... self.finished.emit() class SubWindow(QWidget): def __init__(self, parent=None): super(SubWindow, self).__init__(parent) self.button = QPushButton("Start", self) layout = QVBoxLayout(self) layout.addWidget(self.button) self.setLayout(layout) self.button.clicked.connect(self.start_worker_thread) def start_worker_thread(self): self.worker_thread = WorkerThread() self.worker_thread.finished.connect(self.worker_thread_finished) self.worker_thread.start() def worker_thread_finished(self): # 在这里处理子线程结束后的操作 # ... class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.sub_window = SubWindow(self) self.setCentralWidget(self.sub_window) if __name__ == '__main__': app = QApplication([]) main_window = MainWindow() main_window.show() app.exec_()
在这个例子中,我们创建了一个WorkerThread
类,继承自QThread
。在WorkerThread
类的run()
方法中,我们可以执行需要在子线程中运行的任务,然后发出finished
信号表示任务完成。
在SubWindow
类的start_worker_thread()
方法中,我们创建了一个WorkerThread
实例,并连接了finished
信号到worker_thread_finished()
方法。然后,我们调用start()
方法启动子线程。
在worker_thread_finished()
方法中,我们可以处理子线程结束后的操作。
最后,我们创建了一个MainWindow
类,把SubWindow
作为其中央窗口。在MainWindow
中,我们创建了一个SubWindow
实例,并显示主窗口。
当点击SubWindow
中的按钮时,会启动子线程执行任务,并在任务完成后进行相应的处理。