📜  使用 python 休眠窗口(1)

📅  最后修改于: 2023-12-03 15:06:50.349000             🧑  作者: Mango

使用 Python 休眠窗口

简介

在编写图形用户界面 (GUI) 应用程序时,我们经常需要将窗口或部件暂停或休眠一段时间。 Python 提供了一个标准库 time,它含有 sleep() 函数,可以在代码执行期间暂停执行程序。在本篇文章中,我们将介绍如何使用 Python 中的 time.sleep() 函数来实现窗口休眠。

time.sleep() 函数

首先,我们先来了解 time.sleep() 函数。该函数可以暂停程序的执行,等待指定的时间后再继续执行。其函数原型为:

time.sleep(seconds)

其中,seconds 参数是等待的时间,单位为秒(s)。

以下是示例代码演示了如何使用 time.sleep() 函数来暂停代码执行 3 秒钟:

import time

print("Start")
time.sleep(3)
print("End")

输出:

Start
(等待 3 秒钟)
End
在 PyQT5 中使用 time.sleep() 函数

下面,我们将介绍如何在 PyQT5 应用程序中使用 time.sleep() 函数来暂停窗口的执行。

方法 1:使用 QTimer()

QTimer() 是 PyQT5 中一个常用的用来定时操作的类,它可以用来实现定时器的功能。设置一个 QTimer() 对象,并在其中使用 time.sleep() 函数来暂停程序,然后再使用 QTimer.singleShot() 方法来将其恢复执行。以下是示例代码:

from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication
import time


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()

        button = QPushButton("Click me!")
        button.clicked.connect(self.on_button_click)
        layout.addWidget(button)

        self.setLayout(layout)

    def on_button_click(self):
        print("Start")

        # 设置 QTimer 定时器,定时 3 秒
        timer = QTimer()
        timer.setSingleShot(True)
        timer.timeout.connect(self.delayed_action)
        timer.start(3000)

    def delayed_action(self):
        print("End")


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()
方法 2:使用线程(不推荐)

另外一种实现方法是使用线程。为了避免在主线程中阻塞执行,在一个单独的线程中调用 time.sleep() 函数。以下是示例代码:

from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication
import time


class SleepThread(QThread):
    def __init__(self, seconds):
        super().__init__()
        self.seconds = seconds

    def run(self):
        time.sleep(self.seconds)
        self.finished.emit()


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()

        button = QPushButton("Click me!")
        button.clicked.connect(self.on_button_click)
        layout.addWidget(button)

        self.setLayout(layout)

    def on_button_click(self):
        print("Start")

        # 创建 SleepThread 对象,以 3 秒钟的时间进行休眠
        thread = SleepThread(3)
        thread.finished.connect(self.delayed_action)
        thread.start()

    def delayed_action(self):
        print("End")


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

注意:使用线程这种方式并不推荐,因为如果不小心滥用线程,就会给应用程序增加额外的复杂性和难以调试的问题。

结论

本篇文章介绍了使用 Python 中的 time.sleep() 函数在 PyQT5 应用程序中暂停窗口执行的方法。我们演示了两种实现方式:使用 QTimer() 类及使用线程。在实际应用中,我们应该根据具体情况选择最适合的方式来实现窗口的休眠。