PYQT5 异步

本文禁止转载

异步哪里好用 PYQT5 神奇的很啊

from PyQt5.QtCore import QThread, pyqtSignal

class MainWindow(QMainWindow, Ui_MainWindow): # 自带

    def __init__(self, parent=None):# 自带
        super(MainWindow, self).__init__(parent)# 自带
        self.setupUi(self)# 自带
        
    def K(self):                 #自定义K
        self.thread = R()
        self.thread.start()   
        def w():
            print(1)
        self.thread.T.connect(w)  #异步完成后执行函数w

    def on_pushButton_clicked(self):
         self.K()




class R(QThread):  #自定义
 
    T= pyqtSignal()    #信号  

    def __init__(self, parent=None):
        super(R, self).__init__()
    def __del__(self):
        self.wait()
    def run(self):
    
         print(2) #耗时内容

         self.T.emit()        

if __name__ == "__main__":
       ......

线程 回传参数 方法如下:

from PyQt5.QtCore import QThread, pyqtSignal
 
class MainWindow(QMainWindow, Ui_MainWindow): # 自带
 
    def __init__(self, parent=None):# 自带
        super(MainWindow, self).__init__(parent)# 自带
        self.setupUi(self)# 自带
         
    def K(self):                 #自定义K
        self.thread = R()
        self.thread.T.connect(self.w)  #异步完成后执行函数w
        self.thread.start()  

    def w(list_par,str_par): # 接收参数 第一个是list类型,第二个是 str类型
            print(1)


    def on_pushButton_clicked(self):
         self.K()
 
 
 
 
class R(QThread):  #自定义
  
    T= pyqtSignal(list,str)    #信号 同时回传参数 第一个是list类型,第二个是 str类型
 
    def __init__(self, parent=None):
        super(R, self).__init__()
    def __del__(self):
        self.wait()
    def run(self):
     
         print(2) #耗时内容
         list_par=[]
         str_par=''
         self.T.emit(list_par,str_par)  # 回传参数 第一个是list类型,第二个是 str类型
 
if __name__ == "__main__":
       ......     

 

异步+线程

from PyQt5.QtCore import QThread, pyqtSignal
import asyncio
import threading


class MainWindow(QMainWindow, Ui_MainWindow): # 自带
 
    def __init__(self, parent=None):# 自带
        super(MainWindow, self).__init__(parent)# 自带
        self.setupUi(self)# 自带
         
    def K(self):                 #自定义K
        self.thread = R()
        self.thread.T.connect(self.w)  #异步完成后执行函数w
        self.thread.start()  

    async def XXX(self):
        # 循环等耗时操作
        pass

    def DDDDD(self,loop):  
        self.loop = loop
        asyncio.set_event_loop(self.loop)
        loop.run_forever()

    def w(list_par,str_par): # 接收参数 第一个是list类型,第二个是 str类型
        CC = self.XXX()
        HHH= asyncio.new_event_loop()  
        t = threading.Thread(target=self.DDDDD, args=(HHH,)) 
        t.start()
        asyncio.run_coroutine_threadsafe(CC, HHH)


    def on_pushButton_clicked(self):
         self.K()
 
 
 
 
class R(QThread):  #自定义
  
    T= pyqtSignal(list,str)    #信号 同时回传参数 第一个是list类型,第二个是 str类型
 
    def __init__(self, parent=None):
        super(R, self).__init__()
    def __del__(self):
        self.wait()
    def run(self):
     
         print(2) #耗时内容
         list_par=[]
         str_par=''
         self.T.emit(list_par,str_par)  # 回传参数 第一个是list类型,第二个是 str类型
 
if __name__ == "__main__":
       ......     

  

 

posted on 2020-11-25 00:29  不知所以随风飘动  阅读(1194)  评论(0编辑  收藏  举报

导航