事件处理
Q为事件处理提供了两种机制:高级的信号/槽机制,低级的事件处理机制。
本节只介绍事件处理机制的processEvents()函数的使用方法,因为这个函数能够实现实时刷新,表现形式就像多线程一样。详细介绍信号/槽机制和事件处理机制的具体用法可以在其他章节查看。
虽然使用processEvents()函数可以刷新页面,但是一般不建议这样操作,而是把耗时的操作放到子线程中。
对于执行很耗时的程序来说,PySide6需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿;
如果在执行这个耗时的程序时不断运行 QApplication processEvents()函数,那么就可以实现一边执行耗时的程序,一边刷新页面的功能,给人的感觉就是程序运行很流畅。
因此,QApplication.processEvents)函数的使用方法就是,在主函数执行耗时操作的地方加入 QApplication.processEvents()函数。
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/13 23:13
# File_name: 04-processEvents例子.py
from PySide6.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout
import sys
import time
class WinForm(QWidget):
def __init__(self,parent=None):
super(WinForm,self).__init__(parent)
self.setWindowTitle("实时刷新界面例子")
self.listFile = QListWidget()
self.btnStart = QPushButton('开始')
layout = QGridLayout(self)
layout.addWidget(self.listFile,0,0,1,2)
layout.addWidget(self.btnStart,1,1)
self.btnStart.clicked.connect(self.slotAdd)
self.setLayout(layout)
def slotAdd(self):
for n in range(10):
str_n = 'File index {0}'.format(n)
self.listFile.addItem(str_n)
QApplication.processEvents()
time.sleep(1)
if __name__ =="__main__":
app = QApplication(sys.argv)
form = WinForm()
form.show()
sys.exit(app.exec())