python槽函數(shù) python槽函數(shù)參數(shù)傳遞

python線程間通信的問題,回答有加分!300

pyqt的線程之間的通信是通過信號to槽來實現(xiàn)的,首先你在線程類里面聲明一個全局槽比如:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了海豐免費建站歡迎大家使用!

class?imThread(QtCore.QThread):

imslot?=?QtCore.pyqtSignal()

這里是要重點注意,上面的是沒有任何參數(shù)的一個信號,如果你需要參數(shù)的話,你可以在里面添加參數(shù)類型,例如:

imslot1?=?QtCore.pyqtSignal(str)????#這是一個帶字符串參數(shù)的信號

imslot2?=?QtCore.pyqtSignal(int)????#這是一個帶整型參數(shù)的信號

imslot3?=?QtCore.pyqtSignal(bool)???#這是一個帶布爾參數(shù)的信號

當(dāng)然了,如果你需要多個參數(shù)的話,同樣地往里面加就是了,qt也沒有要求參數(shù)必須是同類型的,所以可以這樣:

imslot1?=?QtCore.pyqtSignal(str,?int)????#這是一個帶整型和字符串的參數(shù)信號

imslot2?=?QtCore.pyqtSignal(int,?str,?str)????#這是一個帶整型和兩個字符串的參數(shù)信號

imslot3?=?QtCore.pyqtSignal(bool,?str)?#這是一個帶布爾和字符串的參數(shù)信號

在線程的run方法里面來定義執(zhí)行信號:

self.imslot.emit()

這里也是需要重點注意的是,上面這個接口是沒有參數(shù)的,如果你是要參數(shù)的話,是需要這樣寫:

self.imslot1[str].emit('hello')

self.imslot2[int].emit(1)

self.imslot3[bool].emit(False)

多參數(shù)的是這樣

self.imslot1[str,?int].emit('hello',?1)

self.imslot2[int,?str,?str].emit(1,?"hello",?"world")

self.imslot3[bool,?str].emit(False,?'hello')

以上就是在線程類里面完成信號定義了,接下來就是邏輯層成定義一個函數(shù)槽來連接線程類里面的信號,這個也很簡單,比如我在主線程類里面定義一個方法:

def?imSlot():

print?'ok'

以上這個是槽函數(shù),接下來是實現(xiàn)信號槽的連接

imThread.imslot.connect('imSlot')

這個就是信號槽的連接方式,當(dāng)然了,這個是沒有參數(shù)的一個信號槽,那么帶參數(shù)的怎么寫呢?也很簡單!首先定義一個槽函數(shù):

def?imSlot(para):

print?para

這個是帶參數(shù)的槽函數(shù),下面是:

imThread.imslot[str].connect('imSlot')

以上就是線程之間的方法了,子線程在執(zhí)行的通行經(jīng)過執(zhí)行信號的話,子線程可以安全地執(zhí)行而不會出現(xiàn)GUI主線程卡死的情況了。

Python需要disconnect信號嗎

在使用信號調(diào)用disconnect()方法斷開信號和槽的連接時,信號可以帶簽名也可不帶簽名,參數(shù)可以沒有也可以有一個,這些組合情況下disconnect的處理是不同的,具體情況如下:

?1.PyQt5.14的官網(wǎng)上介紹說如果參數(shù)為空,表示信號連接的所有槽都會斷開,這句話是有歧義的,只是斷開所有與信號簽名匹配的槽,如果調(diào)用時信號不帶簽名,則默認斷開第一個簽名對應(yīng)的所有槽;

?2.如果斷開時信號帶簽名,參數(shù)為槽函數(shù),但二者不匹配時則會引發(fā)異常;

?3.如果斷開時信號帶簽名,參數(shù)為connection對象,斷開的是與簽名匹配的連接信號和槽,不按參數(shù)進行連接斷開;

?4.如果斷開時信號不帶簽名,參數(shù)為connection對象,則按connection對象斷開連接。

python pyqt5 自定義信號和槽

"""

【簡介】

內(nèi)置信號槽示例

"""

from PyQt5.QtCore import QObject, pyqtSignal

class QTypeSignal(QObject):

# 定義一個信號

sendmsg = pyqtSignal(object)

class QTypeSlot(QObject):

def init (self):

super(QTypeSlot, self). init ()

if name == ' main ':

send = QTypeSignal()

slot = QTypeSlot()

# 1

print('--- 把信號綁定到槽函數(shù) ---')

send.sendmsg.connect(slot.get)

send.run()

from PyQt5.QtCore import QObject , pyqtSignal

class QTypeSignal(QObject):

#定義一個信號

sendmsg = pyqtSignal( str,str)

class QTypeSlot(QObject):

def init ( self):

super( QTypeSlot, self). init ()

if name == ' main ':

send = QTypeSignal()

slot = QTypeSlot()

PYQT設(shè)計完成,如何用python檢測事件?

答: 可以將事件連接到槽函數(shù),然后在槽函數(shù)里面設(shè)置相關(guān)內(nèi)容。這樣的話每次事件觸發(fā)時,槽函數(shù)里面的內(nèi)容就可以執(zhí)行,根據(jù)內(nèi)容也就可以判斷知道哪個事件被觸發(fā)了。信號綁定槽函數(shù)的方法有如下所示。

就比如說你要捕獲按鈕的點擊事件(clicked),當(dāng)按鈕(定義為btn)被點擊后,我們調(diào)用一個on_click函數(shù)(這是我們自己定義的),那么最后的代碼就是這樣btn.clicked.connect(on_click),就可以把按鈕的點擊事件與槽函數(shù)相連。

本文名稱:python槽函數(shù) python槽函數(shù)參數(shù)傳遞
URL標題:http://muchs.cn/article30/hjeoso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、域名注冊ChatGPT、營銷型網(wǎng)站建設(shè)、網(wǎng)站改版App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營