PyQt5数据计算时防止主界面阻塞的等待界面
时间: 2023-05-16 21:06:40 浏览: 542
Qt模式弹框不阻塞
可以使用QProgressDialog来实现等待界面,同时在计算数据的时候使用QThread来避免主界面的阻塞。具体实现可以参考以下代码:
```python
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressDialog, QPushButton
import time
class CalculationThread(QThread):
progress_signal = pyqtSignal(int)
def __init__(self):
super().__init__()
def run(self):
for i in range(101):
time.sleep(0.1)
self.progress_signal.emit(i)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 400, 300)
self.setWindowTitle('PyQt5 Wait Dialog')
self.button = QPushButton('Start Calculation', self)
self.button.move(150, 100)
self.button.clicked.connect(self.start_calculation)
self.show()
def start_calculation(self):
dialog = QProgressDialog('Calculating...', 'Cancel', 0, 100, self)
dialog.setWindowModality(2)
dialog.show()
thread = CalculationThread()
thread.progress_signal.connect(dialog.setValue)
thread.start()
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
app.exec_()
```
这段代码实现了一个简单的界面,当用户点击按钮时,会弹出一个等待界面,并在后台使用QThread进行数据计算,同时使用QProgressDialog来显示计算进度。这样可以避免主界面的阻塞,提高用户体验。
阅读全文