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

该博客介绍了如何在PyQt5应用中利用QThread进行多线程处理,通过pyqtSignal传递和接收字符串。当点击按钮时,从lineEdit获取URL并启动线程,线程在run方法中执行任务并每隔一秒打印输入的URL,最后通过yt_emit信号将结果发送回主线程,主线程接收到信号后在ppprint方法中打印输出。

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

### 将两个字符串连接并转换为其他格式 在编程实践中,经常需要先将多个字符串连接起来再将其转换成特定格式。下面以 C++ 和 Python 为例展示这一过程。 #### 使用 C++ 在 C++ 中可以通过 `std::string` 类来轻松实现字符串的拼接,并利用 `std::to_string()` 函数或 `std::stringstream` 来完成最终类型的转换[^1]: ```cpp #include <iostream> #include <sstream> int main() { std::string str1 = "Hello"; std::string str2 = "World"; // 连接两个字符串 std::string combinedStr = str1 + " " + str2; int numToConvert = 123; // 创建 stringstream 对象用于转换 std::stringstream ss; ss << combinedStr << ", Number: "; ss << numToConvert; // 输出结果 std::cout << ss.str(); } ``` 这段代码展示了如何创建一个新的字符串变量 `combinedStr` 并通过加号运算符连接原始字符串;接着使用 `std::stringstream` 实现了向其中追加额外信息的功能。 #### 使用 Python Python 提供了一种更为简洁的方式来进行相同的操作: ```python str1 = 'Hello' str2 = 'World' # 字符串连接 concatenated_str = f"{str1} {str2}" number_to_convert = 123 final_output = concatenated_str + ', Number: ' + str(number_to_convert) print(final_output) ``` 这里采用了格式化字符串(f-string),它允许直接嵌入表达式,在大括号 `{}` 内计算其值作为部分输出的一部分。之后同样调用了内置的 `str()` 方法把整型数值转成了字符串以便于后续处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值