欢迎访问宙启技术站
智能推送

PyQt5单发定时器:使用singleShot()方法实现延迟执行

发布时间:2024-01-01 03:31:58

PyQt5是一个用于创建图形用户界面(GUI)的Python模块,它提供了丰富的工具和组件来创建交互式的应用程序。PyQt5中的定时器可以实现延迟执行某个方法或代码块的功能。其中,singleShot()方法是一种简单的定时器,只会在一个特定的时间间隔之后执行一次。

下面是一个使用singleShot()方法的简单例子,展示了如何通过定时器实现延迟执行的功能。在该例子中,我们创建了一个基本的窗口,并在其中添加一个按钮。点击按钮后,延迟一秒后输出一条消息。

import sys
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel


class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Delayed Execution')
        self.setGeometry(300, 300, 300, 200)

        self.button = QPushButton('Click me!', self)
        self.button.setGeometry(100, 50, 100, 30)
        self.button.clicked.connect(self.delayedExecution)

        self.label = QLabel(self)
        self.label.setGeometry(100, 100, 200, 30)
        self.label.setAlignment(Qt.AlignCenter)

    def delayedExecution(self):
        self.button.setEnabled(False)  # 禁用按钮
        self.label.setText('Waiting...')

        QTimer.singleShot(1000, self.executeAfterDelay)  # 延迟一秒后执行executeAfterDelay方法

    def executeAfterDelay(self):
        self.label.setText('Delayed execution finished.')
        self.button.setEnabled(True)  # 启用按钮


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

在上面的例子中,我们首先导入所需的模块,然后定义了一个继承自QMainWindow的Example类。在initUI()方法中,我们设置了窗口的标题和大小,并创建了一个按钮和一个标签。按钮的clicked信号与delayedExecution()方法相连,当点击按钮时,该方法将会被调用。

在delayedExecution()方法中,我们首先禁用按钮,并在标签中显示一条"Waiting..."的消息。然后,使用QTimer.singleShot()方法设定一个一秒的定时器,当定时器倒计时结束后,将会调用executeAfterDelay()方法。这个方法会在标签中显示一条"Delayed execution finished."的消息,并重新启用按钮。

最后,我们创建了一个QApplication实例,并显示了Example窗口。app.exec_()保持应用程序的事件循环,直到我们关闭程序窗口。