PyQt5學習筆記13----pyqt執行緒間通訊
PyQt的窗體控制元件類已經有很多的內建訊號,開發者也可以新增自己的自定義訊號,訊號槽有如下特點:
- 一個訊號可以連線到許多插槽。
- 一個訊號也可以連線到另一個訊號。
- 訊號引數可以是任何Python型別。
- 一個插槽可以連線到許多訊號。
- 連線可能會直接(即同步)或排隊(即非同步)。
- 連線可能會跨執行緒。
- 訊號可能會斷開
(以上幾條特點翻譯於官方文件),接下來,我將以若干個例項,來體現以上幾個特點。
內建訊號槽的使用
- from PyQt5.QtWidgets import *
- from PyQt5.QtCore import *
- def sinTest():
- btn.setText("按鈕文字改變")
- app = QApplication([])
- main = QWidget()
-
main.resize(200,100)
- btn = QPushButton("按鈕文字",main)
- ##按鈕btn的內建訊號連線名為sinTest的槽
- btn.clicked.connect(sinTest)
- main.show()
- app.exec_()
自定義訊號槽的使用
- class SinClass(QObject):
- ##宣告一個無引數的訊號
- sin1 = pyqtSignal()
- ##宣告帶一個int型別引數的訊號
- sin2 = pyqtSignal(int)
- ##宣告帶一個int和str型別引數的訊號
-
sin3 = pyqtSignal(int,str)
- ##宣告帶一個列表型別引數的訊號
- sin4 = pyqtSignal(list)
- ##宣告帶一個字典型別引數的訊號
- sin5 = pyqtSignal(dict)
- ##宣告一個多過載版本的訊號,包括了一個帶int和str型別引數的訊號,以及帶str引數的訊號
- sin6 = pyqtSignal([int,str], [str])
- def __init__(self,parent=None):
- super(SinClass,self).__init__(parent)
- ##訊號連線到指定槽
- self.sin1.connect(self.sin1Call)
- self.sin2.connect(self.sin2Call)
- self.sin3.connect(self.sin3Call)
- self.sin4.connect(self.sin4Call)
- self.sin5.connect(self.sin5Call)
- self.sin6[int,str].connect(self.sin6Call)
- self.sin6[str].connect(self.sin6OverLoad)
- ##訊號發射
- self.sin1.emit()
- self.sin2.emit(1)
- self.sin3.emit(1,"text")
- self.sin4.emit([1,2,3,4])
- self.sin5.emit({"name":"codeio","age":"25"})
- self.sin6[int,str].emit(1,"text")
- self.sin6[str].emit("text")
- def sin1Call(self):
- print("sin1 emit")
- def sin2Call(self,val):
- print("sin2 emit,value:",val)
- def sin3Call(self,val,text):
- print("sin3 emit,value:",val,text)
- def sin4Call(self,val):
- print("sin4 emit,value:",val)
- def sin5Call(self,val):
- print("sin5 emit,value:",val)
- def sin6Call(self,val,text):
- print("sin6 emit,value:",val,text)
- def sin6OverLoad(self,val):
- print("sin6 overload emit,value:",val)
- sin = SinClass()
sin1 emit
sin2 emit,value: 1
sin3 emit,value: 1 text
sin4 emit,value: [1, 2, 3, 4]
sin5 emit,value: {'age': '25', 'name': 'codeio'}
sin6 emit,value: 1 text
sin6 overload emit,value: text
訊號槽N對N連線、斷開連線
- from PyQt5.QtWidgets import *
- from PyQt5.QtCore import *
- class SinClass(QObject):
- ##宣告一個無引數的訊號
- sin1 = pyqtSignal()
- ##宣告帶一個int型別引數的訊號
- sin2 = pyqtSignal(int)
- def __init__(self,parent=None):
- super(SinClass,self).__init__(parent)
- ##訊號sin1連線到sin1Call和sin2Call這兩個槽
- self.sin1.connect(self.sin1Call)
- self.sin1.connect(self.sin2Call)
- ##訊號sin2連線到訊號sin1
- self.sin2.connect(self.sin1)
- ##訊號發射
- self.sin1.emit()
- self.sin2.emit(1)
- ##斷開sin1、sin2訊號與各槽的連線
- self.sin1.disconnect(self.sin1Call)
- self.sin1.disconnect(self.sin2Call)
- self.sin2.disconnect(self.sin1)
- ##訊號sin1和sin2連線同一個槽sin1Call
- self.sin1.connect(self.sin1Call)
- self.sin2.connect(self.sin1Call)
- ##訊號再次發射
- self.sin1.emit()
- self.sin2.emit(1)
- def sin1Call(self):
- print("sin1 emit")
- def sin2Call(self):
- print("sin2 emit")
- sin = SinClass()
sin1 emit
sin2 emit
sin1 emit
sin2 emit
sin1 emit
sin1 emit
多執行緒訊號槽通訊
- from PyQt5.QtWidgets import *
- from PyQt5.QtCore import *
- class Main(QWidget):
- def __init__(self, parent = None):
- super(Main,self).__init__(parent)
- ##建立一個執行緒例項並設定名稱、變數、訊號槽
- self.thread = MyThread()
- self.thread.setIdentity("thread1")
- self.thread.sinOut.connect(self.outText)
- self.thread.setVal(6)
- def outText(self,text):
- print(text)
- class MyThread(QThread):
- sinOut = pyqtSignal(str)
- def __init__(self,parent=None):
- super(MyThread,self).__init__(parent)
- self.identity = None
- def setIdentity(self,text):
- self.identity = text
- def setVal(self,val):
- self.times = int(val)
- ##執行執行緒的run方法
- self.start()
- def run(self):
-
whileself.times > 0and
相關推薦
PyQt5學習筆記13----pyqt執行緒間通訊
訊號(singal)與槽(slot)用於物件相互通訊,訊號:當某個物件的某個事件發生時,觸發一個訊號,槽:響應指定訊號的所做的反應,其實訊號槽類似於.NET裡面的委託、事件,比如Repeater控制元件類,當行資料繫結後,觸發一個ItemDataBound事件,不管使用者
Java多執行緒學習筆記13之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1) 生產者消費者模型 多個生產者和多個消費者: 操作值假死及解決 多個生產者和多個消費者: 操作棧假死及解決 2) 通過管
Java多執行緒學習筆記15之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1)ThreadLocal類的使用 JDK文件及方法翻譯 InheritableThreadLocal的使用 5.
Java多執行緒學習筆記14之執行緒間通訊
詳細程式碼見:github程式碼地址 本節內容: 1) 實戰 等待/通知之交叉備份 2) 方法join的使用(Jdk文件翻譯及原始碼解析) join()及join(long)的使用和實現原理 &nbs
Java多執行緒學習筆記11之執行緒間通訊
本文是我學習Java多執行緒以及高併發知識的第一本書的學習筆記, 書名是<<Java多執行緒程式設計核心技術>>,作者是大佬企業高階專案經理 高洪巖前輩,在此向他致敬。我將配合開發文件以及本書和其他的部落格 奉獻著的文章來學習,同時做一些簡單的總結。有
Linux 學習筆記—執行緒間通訊的概念和執行緒控制函式
1 執行緒間通訊 執行緒間無需特別的手段進行通訊,由於執行緒間能夠共享資料結構,也就是一個全域性變數能夠被兩個執行緒同一時候使用。只是要注意的是執行緒間須要做好同步,一般用mutex。執行緒間的通訊目的主要是用於執行緒同步,所以執行緒沒有像程序通訊中的用於資料交
JUC學習筆記(2)—執行緒間通訊
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; cla
RT-Thread學習筆記3-執行緒間通訊 & 定時器
[toc] *** ## 1. 事件集的使用 單個指定事件喚醒執行緒,任意事件喚醒執行緒,多個指定事件一起喚醒執行緒。訊號量主要用於“一對一”的執行緒同步,當需要“一對多”、“多對一”、“多對多”的同步時,就需要事件集來處理了。RT-Thread中的事件集用一個32位無符號整型變數來表示,變數中的一個位代表
Android學習筆記 三二 執行緒 後臺非同步任務AsyncTask
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
python學習筆記 day39 多執行緒的守護執行緒
1. 守護執行緒 設定子執行緒為守護執行緒,則守護執行緒的程式碼會等待主執行緒程式碼執行完畢而結束: # 如果列印兩個 子執行緒執行結束,肯定是先列印的守護執行緒的,然後才是子執行緒2的,因為如果子執行緒2先打印出來,那麼主執行緒程式碼就結束了,守護執行緒也就立馬結束,不會在進行列印; # 如果只
python學習筆記(62) 多執行緒
程序是資源分配的最小單位(資料隔離),執行緒是cpu排程的最小單位,每個程序至少有一個執行緒 能直接被cpu排程的是執行緒,輕型實體 共享程序資源,可以併發執行,全域性變數在多個執行緒之間共享 使用者級執行緒,核心級執行緒,混合實現 全域性直譯器鎖 GIL:同一時刻只能有一個執行緒來訪
學習筆記: jstack與執行緒狀態
jstatck可以列印JVM內部所有執行緒 1、檢視有哪些java程序 2、檢視所有執行緒的資訊 重定向到5579.txt檔案中 jstack 5579 > 5579.txt 3、執行緒的狀態 New: 執行緒還沒有啟動 RUNNABLE:已經在JVM中
學習筆記-python守護執行緒和時間延遲
python守護執行緒和時間延遲 也許我們存在這種需求,有些執行緒是處於監聽功能的執行緒,希望其一直執行下去,直到關機,那麼對於一個程式而言,在啟動之後一個程序裡面可以存在很多個執行緒,其他執行緒先執行完成,如果存在某個執行緒需要一直執行,那麼這個程式就無法退出,此時就需要守護執行緒這種
Java學習筆記之——多執行緒
多執行緒程式設計 程式: 程序:一個程式執行就會產生一個程序 執行緒:程序的執行流程,一個程序至少有一個執行緒,稱為主執行緒 如:QQ聊著天,同時在聽音樂 一個程序可以有多個執行緒,多個執行緒共享同一個程序的資源 執行緒類:Tread 多執行緒程式設計: 方式一:繼承Thread (1)&n
Deepin學習筆記---如何多執行緒下載網路檔案
**** 命令列下載網路檔案* 當時看到師兄用多執行緒下載一個檔案,簡直帥呆了,然後自己偷摸學習了一下,很爽,這邊推薦兩個命令列下載網路檔案的方法,前提是要有下載連結哦! 一、 1.wget下載方式 wget http://www.linuxsense.or
Android學習筆記 三二 執行緒 後臺非同步任務AsyncTask
去五金店買個鑽,不是因為我們需要鑽,我們只需需要孔,既然五金店無法買孔,退而求其次,買打孔的工具。同樣的對於後臺執行緒,我們真正需要的是能夠在UI主執行緒外進行處理,Android提供一個讓程式設計師編寫後臺操作更為容易和透明AsyncTask。使用AsyncTask,需要建立AsyncTask的資料,並實現
學習筆記之Java執行緒安全雜談(上)——執行緒安全概念和基本方案
執行緒安全問題絕對是併發開發中一個重點中的重點,這篇就來說說執行緒安全相關的一些問題。執行緒安全是什麼概念?這個概念說簡單也簡單,說複雜也複雜,“安全”的概念是什麼,用我個人的話說的淺顯些,就是類/物件本身在多執行緒併發執行的場景下,能夠保證程式的邏輯是可以接受的而不是被
PyQt5學習筆記16----PyQt訊號和槽傳遞額外引數
使用Pyqt程式設計過程中,經常會遇到給槽函式傳遞額外引數的情況。但是訊號-槽機制只是指定訊號如何連線到槽,訊號定義的引數被傳遞給槽,而額外的引數(使用者定義)不能直接傳遞。 而傳遞額外引數又是很有用處。你可能使用一個槽處理多個元件的訊號,有時要傳遞額外的資訊。 一
13.執行緒間通訊
多個執行緒在操作同一個資源,操作動作不同 package 執行緒通訊; import java.security.interfaces.RSAKey; import 電話號碼.Main; /* * 例子:生產者消費者 * 如果兩個執行緒生成,兩個執行緒消費 */ pu
筆記九:執行緒間的通訊(pthread_create()和pthread_self())
linux高階程式設計之執行緒間的通訊:(pthread_create()、pthread_self()) 1.執行緒概念 執行緒包含了表示程序內執行環境必須得資訊,其中包括程序中標識執行緒