引言
首先,给大家介绍一下 Python
中 time
模块中的 sleep
函数。这个函数用来让程序的主进程进入到休眠等待环节,在这中间最终的要的是,它实际上是在消耗计算机的计算资源,在不使用多进程或者多线程的情况下,程序类似于被中断执行。
这种情况会导致如下示例中我们使用它时无法得到我们预期的结果。
正文
示例 1
可以参考这个链接中的问题,当我们想要在每次执行完成第二个文件中的任务就在文件一创建的 Gui
显示界面中进行反馈并打印信息时,此时,程序总是会在完全被执行完成后才会进行打印操作。最终我们只会得到 Task 3 completed
的信息显示,而不会得到 Task 1 completed->Task 2 completed->Task 3 completed
信息按顺序的显示。为了能够使得每完成一个任务就输出一个对应的提示信息到 QLineEditor
组件上,我们需要使用 PyQt6
中的 Timer
模块。
修改后的代码如下:
from PyQt6.QtCore import Qt, pyqtSlot, QTimer
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QVBoxLayout, QWidget
from gui_file import YourCalculator
class YourGUI(QMainWindow):
def __init__(self):
super().__init__()
self.setFixedSize(800, 600)
self.calculator = YourCalculator()
self.calculator.task_completed.connect(self.on_task_completed)
button = QPushButton("Start Tasks")
button.clicked.connect(self.start_tasks)
button.setFixedSize(200, 20)
self.line_editor = QLineEdit("hhh")
self.line_editor.setFixedSize(200, 200)
widget = QWidget(self)
widget.setFixedSize(400, 600)
layout = QVBoxLayout(widget)
layout.addWidget(button)
layout.addWidget(self.line_editor)
self.timer = None
self.task_index = None
def start_tasks(self):
self.task_index = 1
self.timer = QTimer()
self.timer.timeout.connect(self.execute_tasks)
self.timer.start(500)
def execute_tasks(self):
if self.task_index <= 3:
task_method = getattr(self.calculator, f"task{self.task_index}")
task_method()
self.task_index += 1
else:
self.timer.stop()
@pyqtSlot(str)
def on_task_completed(self, message):
self.line_editor.setText(message)
if __name__ == "__main__":
app = QApplication([])
window = YourGUI()
window.show()
app.exec()
关于 QTimer()
的内容我们这里不做详细说明,有兴趣的小伙伴们可以自行去了解。QTimer()
本质上类似于开了一个额外的 Thread
来监测独立于主 Gui
界面程序以外的其他事件的发生。
如果大家觉得有用,就请点个赞吧~