PySide2如何加载耗时组件
QTherad方式
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time:2023/9/25 10:12
# @Software:PyCharm
__author__ = "JentZhang"
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel
from PySide2.QtCore import QThread, Signal
class Worker(QThread):
finished_signal = Signal(str)
def run(self):
# 模拟耗时任务
import time
time.sleep(3)
self.finished_signal.emit("Task Finished!")
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.layout = QVBoxLayout(self)
self.label = QLabel("Press the button to start the task.")
self.button = QPushButton("Start Task")
self.layout.addWidget(self.label)
self.layout.addWidget(self.button)
self.button.clicked.connect(self.startTask)
def startTask(self):
self.worker = Worker()
self.worker.finished_signal.connect(self.onTaskFinished)
self.label.setText("Task is running...")
self.button.setEnabled(False)
self.worker.start()
def onTaskFinished(self, message):
self.label.setText(message)
self.button.setEnabled(True)
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
QTimer方式
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time:2023/9/25 10:28
# @Software:PyCharm
__author__ = "JentZhang"
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
from PySide2.QtCore import QTimer
app = QApplication([])
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.layout = QVBoxLayout(self)
self.label = QLabel("Loading...")
self.layout.addWidget(self.label)
# 使用 QTimer 延迟加载
QTimer.singleShot(1000, self.loadComponent)
def loadComponent(self):
# 这里模拟了一个耗时的加载过程
# 实际应用中,这里可以是真正的组件加载代码
self.label.setText("Component Loaded!")
window = MainWindow()
window.show()
app.exec_()
好记性不如烂笔头!