pyqt的子窗口如何创建线程
在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中的按钮时,会启动子线程履行任务,并在任务完成落后行相应的处理。
TOP