在多工處理時,常常需要用到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 內,得到字串