前言
欢迎来到我的博客
个人主页:北岭敲键盘的荒漠猫-CSDN博客
本文主要整理pyside6中,用到的线程相关的内容
QTimer计时表
描述:每隔一定时间发出一个信号,执行相关函数
知识点汇总:
导入库:from PySide6.QtCore import QTimer
实例化:self.time=QTimer()
绑定槽:self.time.timeout.connect(self.change)
开始计时:self.time.start(1000)
设置只计时一次:self.time.setSingleShot(True)
只计时一次的方法:self.time.singleShot(1000,lambda :print("okokok"))
重新对计时器进行间隔设置:self.time.setInterval(200)
强行停止计时:self.time.stop()
案例演示:
描述:他会在文本框里不断的增加数字
#引入窗口的基本库
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtCore import QTimer
#引入我们的文件(win是我们生成的py文件)
from win import Ui_Form
from subwin import Ui_Form as Ui2
#定义窗口类
class Mainwindow(QWidget,Ui_Form):
def __init__(self): #继承窗口和win文件中的Ui_From类
super().__init__()
self.setupUi(self)#导入UI文件
self.time=QTimer()
self.i=1
self.time.timeout.connect(self.change)
self.time.start(1000)
def change(self):
self.textEdit.setText("{}".format(self.i))
self.i+=1
if __name__=="__main__":
app=QApplication([])#开启,传参
windows=Mainwindow()#实例化对象
windows.show()#显示窗口
app.exec()#循环监听
样式如下:
他自动开一个计时线程不用我们自己做线程。
强行回归图形控制权
这是个伪多线程,他实际就是强行的在一个线程中能让你隔一段时间能获得图形界面的控制权。
但是他可能会感觉起来有点卡。但是小项目没必要开线程的情况下用这个还是比较舒爽的。
语法:
QApplication.processEvents()
案例
#引入窗口的基本库
import time
from PySide6.QtWidgets import QApplication,QWidget
#引入我们的文件(win是我们生成的py文件)
from win import Ui_Form
#定义窗口类
class Mainwindow(QWidget,Ui_Form):
def __init__(self): #继承窗口和win文件中的Ui_From类
super().__init__()
self.setupUi(self)#导入UI文件
self.pushButton_3.clicked.connect(self.exper)
def exper(self):
while True:
time.sleep(1)
QApplication.processEvents()
print("ok")
if __name__=="__main__":
app=QApplication([])#开启,传参
windows=Mainwindow()#实例化对象
windows.show()#显示窗口
app.exec()#循环监听
界面如下
点开后他会执行循环,然后隔一段时间我们能操控窗口,如果我们没有操作窗口。
那么他会很丝滑的继续执行他该干的事。
如果我们操作了窗口,他就会等我们拖动,等动作完成后再继续执行。
QThread子类化实现多线程
这种方法就是创建一个子类,重写run方法,然后让父类调用。
知识点函数汇总:
模块导入:from PySide6.QtCore import QThread
绑定开始:self.thread.started.connect(lambda :print("线程开始时调用这个"))
绑定结束:self.thread.finished.connect(lambda :print("线程结束时调用这个"))
结束后自动删除线程:self.thread.finished.connect(lambda :self.thread.deleteLater())
线程启动:self.thread.start()
案例代码
#引入窗口的基本库
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtCore import QThread
import time
#引入我们的文件(win是我们生成的py文件)
from win import Ui_Form
#定义窗口类
class My_thread(QThread):
def __init__(self):
super().__init__()
def run(self):
for i in range(15):
print("线程正在运作{}".format(i))
time.sleep(2)
class Mainwindow(QWidget,Ui_Form):
def __init__(self): #继承窗口和win文件中的Ui_From类
super().__init__()
self.setupUi(self)#导入UI文件
self.thread=My_thread()
self.thread.started.connect(lambda :print("线程开始时调用这个"))
self.thread.finished.connect(lambda :print("线程结束时调用这个"))
self.thread.finished.connect(lambda :self.thread.deleteLater())
self.thread.start()
if __name__=="__main__":
app=QApplication([])#开启,传参
windows=Mainwindow()#实例化对象
windows.show()#显示窗口
app.exec()#循环监听
效果显示