PyQt5如何实现倒计时弹窗

PyQt5实现倒计时弹窗

1.PyQt5弹窗通过QMessageBox实现
2.使用PyQt5的QTimer模块实现倒计时功能

注意

QTimer 一旦开启start方法,必须使用stop停止不然会每个一端事件会出现弹窗。start方法是中为毫秒。

通过添加按钮、添加标题、实现弹窗页面内容 具体代码如下:
    def waitMita(self):
        self.qmsg_box = QMessageBox()
        self.qmsg_box.setWindowTitle("启动MiTA")
        self.qmsg_box.setText("5S后默认自动启动MiTA")
        self.qmsg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        self.timer = QTimer()
        self.timer.timeout.connect(self.startMita)
        self.timer.start(5000)
        button_y = self.qmsg_box.button(QMessageBox.Yes)
        button_y.setText("启动")
        button_n = self.qmsg_box.button(QMessageBox.No)
        button_n.setText('忽略')
        self.qmsg_box.exec()
        if button_y == self.qmsg_box.clickedButton():
            self.startMita()
        else:
            self.qmsg_box.close()
            self.timer.stop()

    def startMita(self):
        self.qmsg_box.close()
        try:
            self.timer.stop()
            current_dir = os.path.dirname(os.path.abspath(__file__))
            father_dir = os.path.dirname(current_dir)
            p = subprocess.Popen(f"cd {father_dir} & setup_MiTA.bat", stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
                                 shell=True,
                                 close_fds=True,
                                 start_new_session=True)
            try:
                p.communicate(timeout=120)
            except:
                pass
            task_list = subprocess.getstatusoutput("tasklist")
            import re
            mita_compile = re.compile("mita.exe                     (.*?) Console")
            mita_pid = int(mita_compile.findall(task_list[1])[0])
            subprocess.getstatusoutput(f"taskkill /pid {mita_pid} -f")
            QMessageBox.about(self, "提示", "MiTA启动成功,已获取最新版本")
        except:
            QMessageBox.warning(self, "警告", "未找到MiTA.bat", QMessageBox.Cancel)
        finally:
            self.timer.stop()
可以在线程结束后,通过信号槽机制,发送一个信号到主线程,再由主线程弹出提示框。 以下是一个简单的示例代码: ```python from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMessageBox import sys import time class WorkerThread(QThread): finished = pyqtSignal() def run(self): # 模拟耗时的任务 time.sleep(5) self.finished.emit() class MainWindow(QMessageBox): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setGeometry(500, 500, 300, 200) # 创建子线程并连接信号槽 self.thread = WorkerThread() self.thread.finished.connect(self.show_message_box) # 开始执行子线程 self.thread.start() def show_message_box(self): self.setText("任务已完成!") self.exec_() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec_()) ``` 在上面的代码中,`WorkerThread` 类继承自 `QThread`,实现了 `run()` 方法,这个方法会在子线程中执行。在 `run()` 方法中,我们模拟了一个耗时的任务,当任务执行完毕后,通过 `finished` 信号发送给主线程。 在 `MainWindow` 类中,我们创建了一个子线程,并连接了 `finished` 信号到 `show_message_box()` 方法。这个方法会在主线程中执行,弹出一个提示框,告诉用户任务已完成。 最后,我们创建了一个 `QApplication` 实例,并启动了主界面。当程序运行时,主界面会弹出一个提示框,告诉用户任务已完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值