將字串傳入 Thread 處理後,然後再傳出

在多工處理時,常常需要用到Thread 運算,
1.如何傳入字串

from PyQt5.QtWidgets import QMainWindow,QApplication
from message_yt import Ui_Form
import sys,time
from PyQt5.QtCore import QThread, pyqtSignal

class MyDesiger(QMainWindow,Ui_Form):
    def __init__(self,parent=None):
        super(MyDesiger,self).__init__(parent)
        self.setupUi(self)
        self.pushButton_5.clicked.connect(self.click_start) 
    def click_start(self):
        self.url = self.lineEdit.text()  #
        if self.url != "":
            self.input_url=self.url.split("/")
            self.input_url_re=self.input_url[-2]
            self.readread=youtube_read(self.input_url_re) # 一.帶入一個字串到 thread 內  (0)        
            self.readread.yt_emit.connect(self.ppprint)   
            self.readread.start()    # 一. thread 執行 (0)   
        else:
            print("error")
    def ppprint(self, strr): 
        print("拿到Thread運算的結果")
        print("...:", strr)   
class youtube_read(QThread ): (0)
    yt_emit = pyqtSignal(str)                    
    def __init__(self, input_url):   # 一.這邊要寫入(1)
        super().__init__()
        self.runFlag = True   
        self.input_url=input_url     # 一.這邊要傳送到內部 (2)       
    def run(self):
        if self.runFlag == True:
            for i in range(3):
                time.sleep(1)
                print( "self.thread_name:" +  self.input_url) # 一.這邊運送列印 (3)
                self.yt_emit.emit(self.input_url)              
    def stop(self):
        self.runFlag=False
        
if __name__ == "__main__":
    app = QApplication([])
    window = MyDesiger()
    window.show()
    sys.exit(app.exec_())

(0)寫一個Class具有 qthread
(1)在init 將字串帶入
(2)有init, run, 在init 將字串帶入self內部
(3)動作在run 運作

1.如何thread 運算的字串送出來

from PyQt5.QtWidgets import QMainWindow,QApplication
from message_yt import Ui_Form
import sys,time
from PyQt5.QtCore import QThread, pyqtSignal

class MyDesiger(QMainWindow,Ui_Form):
    def __init__(self,parent=None):
        super(MyDesiger,self).__init__(parent)
        self.setupUi(self)
        self.pushButton_5.clicked.connect(self.click_start)
 
    def click_start(self):
        self.url = self.lineEdit.text()  #
        if self.url != "":
            self.input_url=self.url.split("/")
            self.input_url_re=self.input_url[-2]
            self.readread=youtube_read(self.input_url_re)       
            self.readread.yt_emit.connect(self.ppprint)   # 二.yt_emit有變動,會執行 ppprint(3)
            self.readread.start()                        
        else:
            print("error")
    def ppprint(self, strr):  # 二.會把yt_emit所傳送變數 代入(4)
        print("拿到Thread運算的結果")
        print("...:", strr)   # 二.會把yt_emit所傳送變數 代入(4)
    

class youtube_read(QThread ):
    yt_emit = pyqtSignal(str)                     # 二.設定一下輸出的字串,可以各種型態 (1)
    def __init__(self, input_url):  
        super().__init__()
        self.runFlag = True   
        self.input_url=input_url     
       
    def run(self):
        if self.runFlag == True:
            for i in range(3):
                time.sleep(1)
                print( "self.thread_name:" +  self.input_url) 
                self.yt_emit.emit(self.input_url)   # 二.輸出的字串(2)
            
    def stop(self):
        self.runFlag=False

if __name__ == "__main__":
    app = QApplication([])
    window = MyDesiger()
    window.show()
    sys.exit(app.exec_())

(1)把輸出的字串寫在 pyqtSignal上
(2)透過emit將字串輸出
(3)監控參數是否有變動,若有執行 某一 def
(4)可以將結果代入def 內,得到字串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值