pyqt5 执行按钮时候 提示动态等待中
时间: 2023-07-04 10:20:06 浏览: 120
"动态等待中" 的提示通常是由于程序正在执行某些操作,需要一定的时间才能完成。这种情况下,可以采用多线程的方式来避免界面卡死,同时可以给用户一个提示,让用户知道程序正在执行中,不要进行其他操作。
在 PyQt5 中,可以使用 QThread 类来创建新的线程,将一些耗时的操作放在这个新线程中执行,从而避免阻塞主线程。可以在主线程中创建一个进度条或者文本标签来显示程序正在执行中,当程序执行完成后,再将这些控件隐藏起来,让用户可以继续操作界面。
以下是一个简单的示例代码:
```python
import time
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
class Worker(QThread):
progress_signal = pyqtSignal(int)
def run(self):
for i in range(1, 11):
time.sleep(1)
self.progress_signal.emit(i * 10)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 400, 300)
self.label = QLabel(self)
self.label.setGeometry(100, 100, 200, 30)
self.label.setText("动态等待中")
self.progress = QLabel(self)
self.progress.setGeometry(100, 150, 200, 30)
self.progress.setVisible(False)
self.button = QPushButton(self)
self.button.setText("执行操作")
self.button.setGeometry(100, 200, 200, 30)
self.button.clicked.connect(self.do_work)
def do_work(self):
self.button.setEnabled(False)
self.label.setVisible(False)
self.progress.setVisible(True)
worker = Worker()
worker.progress_signal.connect(self.update_progress)
worker.start()
def update_progress(self, progress):
self.progress.setText("进度:{}%".format(progress))
if progress == 100:
self.button.setEnabled(True)
self.label.setVisible(True)
self.progress.setVisible(False)
if __name__ == '__main__':
app = QApplication([])
main_window = MainWindow()
main_window.show()
app.exec_()
```
这个示例程序中,我们创建了一个 Worker 类来执行耗时的操作,利用 QThread 来创建新的线程来执行这些操作。在主界面中,我们创建了一个 QLabel 来显示 "动态等待中" 的提示信息,以及一个进度条 QLabel 来显示进度条。当用户点击按钮时,我们将按钮禁用,隐藏提示信息,显示进度条,并启动 Worker 线程来执行耗时的操作。当操作完成后,我们再将进度条隐藏,显示提示信息,并将按钮重新启用。
这样的实现方式可以让用户清楚地知道程序正在执行中,并且不会阻塞主界面的操作。
阅读全文