在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
中的按鈕時,會啟動子線程執行任務,并在任務完成后進行相應的處理。