📅  最后修改于: 2023-12-03 15:06:50.349000             🧑  作者: Mango
在编写图形用户界面 (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
time.sleep()
函数下面,我们将介绍如何在 PyQT5 应用程序中使用 time.sleep()
函数来暂停窗口的执行。
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_()
另外一种实现方法是使用线程。为了避免在主线程中阻塞执行,在一个单独的线程中调用 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()
类及使用线程。在实际应用中,我们应该根据具体情况选择最适合的方式来实现窗口的休眠。