我用的是pyqt5写的一个工具,页面上有一个按钮,点击这个按钮,会执行循环打印信息 ,间隔0.5秒。同时弹出一个提示信息框在倒计时,倒计时不影响打印的进行,实现同步执行
时间: 2023-08-09 18:08:49 浏览: 91
PyQt5按钮点击事件 给按钮绑定事件调用自定义函数 QPushButton
5星 · 资源好评率100%
可以使用多线程来实现这个功能,一个线程用来循环打印信息,另一个线程用来弹出提示信息框并进行倒计时。具体实现步骤如下:
1. 导入`threading`模块。
2. 定义一个类,继承自`QtCore.QThread`,用来执行循环打印信息的任务。重写`run`方法,在其中使用`while`循环来打印信息,每次循环后使用`time.sleep(0.5)`来让线程休眠0.5秒。
3. 定义另一个类,同样继承自`QtCore.QThread`,用来执行弹窗提示和倒计时任务。在该类中定义一个`countdown`方法,用来进行倒计时。在该方法中使用`QMessageBox`弹出提示信息框,并使用`time.sleep(1)`来让线程休眠1秒,实现倒计时功能。当倒计时结束后,关闭提示信息框。
4. 在主程序中,创建两个线程分别用于执行循环打印信息和弹窗提示和倒计时任务。启动这两个线程,即可实现同步执行。
参考代码如下:
```python
import sys
import time
from PyQt5 import QtWidgets, QtCore
class PrintThread(QtCore.QThread):
def run(self):
while True:
print("Printing...")
time.sleep(0.5)
class CountdownThread(QtCore.QThread):
def __init__(self, parent=None):
super().__init__(parent)
self.parent = parent
def countdown(self):
msg_box = QtWidgets.QMessageBox()
msg_box.setWindowTitle("提示")
msg_box.setText("倒计时开始")
count = 10
while count > 0:
msg_box.setInformativeText(f"{count}秒后关闭")
msg_box.exec_()
time.sleep(1)
count -= 1
msg_box.setInformativeText("倒计时结束")
msg_box.exec_()
self.parent.close()
def run(self):
self.countdown()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.print_thread = PrintThread()
self.countdown_thread = CountdownThread(self)
button = QtWidgets.QPushButton("开始")
button.clicked.connect(self.start_threads)
central_widget = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout(central_widget)
layout.addWidget(button)
self.setCentralWidget(central_widget)
def start_threads(self):
self.print_thread.start()
self.countdown_thread.start()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个例子中,我们定义了两个线程:`PrintThread`和`CountdownThread`。`PrintThread`用来循环打印信息,`CountdownThread`用来弹出提示信息框并进行倒计时。在`MainWindow`中,我们创建了一个按钮,点击该按钮会启动这两个线程来执行任务。运行该程序后,可以看到循环打印信息和倒计时的提示信息框是同步进行的。
阅读全文