Pyqt 訊號(signal)和槽函式(slot)

2021-10-24 20:40:32 字數 2811 閱讀 6205

訊號(signal):就是在特定情況下被發射(emit)的一種通告

槽函式(slot):對訊號(signal)相應的函式, 接收某個物件傳送的訊號,執行某種操作。槽函式和普通函式的區別就是可與 訊號 關聯。

在qt中,每乙個qobject物件和pyqt中所有繼承自qwidget的控制項(這些都是qobject的子物件)都支援訊號與槽機制。當訊號發射時,連線的槽函式將會自動執行。在pyqt 5中訊號與槽通過object.signal.connect()方法連線。

pyqt的視窗控制項類中有很多內建訊號,開發者也可以新增自定義訊號。訊號與槽具有如下特點。

示例如下,擷取了部分自己的**, 注意在自定義訊號signal時要在屬性中定義, 不要在__init__中定義

from pyqt5 import qtcore

class

startclient

(qtcore.qobject)

: signal_progress = qtcore.

pyqtsignal

(int)

signal_log = qtcore.

pyqtsignal

(str)

signal_clear_log = qtcore.

pyqtsignal()

signal_status = qtcore.

pyqtsignal

(str)

signal_lineedit_ip = qtcore.

pyqtsignal

(str)

signal_client_id = qtcore.

pyqtsignal

(str)

signal_devuaid = qtcore.

pyqtsignal

(str)

signal_iccid = qtcore.

pyqtsignal

(str)

def __init__

(self)

:super()

.__init__()

self.groupbox = none

self.lineedit_ip = none

self.lineedit_devuaid = none

self.lineedit_client_id = none

self.lineedit_iccid = none

self.progressbar = none

self.file_log = none

self.pushbutton_log = none

self.textedit_log = none

self.lineedit_status = none

# connect slot

self.signal_progress[int]

.connect

(self.__slot_set_progress_bar_value)

self.signal_log[str]

.connect

(self.__slot_write_log)

self.signal_status[str]

.connect

(self.__slot_set_status)

self.signal_lineedit_ip[str]

.connect

(self.__slot_set_ip)

self.signal_client_id[str]

.connect

(self.__slot_set_client_id)

self.signal_devuaid[str]

.connect

(self.__slot_set_devuaid)

self.signal_iccid[str]

.connect

(self.__slot_set_iccid)

self.device_ip =

"" self.devuaid =

"" self.client_id =

"" self.iccid =

"" self.password =

"" self.sign_key =

"" self.mac =

"" def __slot_set_iccid

(self, text="")

:if self.lineedit_iccid is not none:

self.lineedit_iccid.

settext

(text)

self.iccid = text

def set_iccid

(self, text="")

:if self.signal_iccid is not none:

self.signal_iccid.

emit

(text)

def set_iccid2

(self, text="")

: self.iccid = text

示例中,槽函式__slot_set_iccid()同時給兩個地方賦了值, 值得注意的時如果使用了signal和slot這種方式給self.iccid複製,時間上不如方法set_iccid2(),因為當發出訊號後,到槽函式接受到訊號開始處理時需要一段時間, 這段時間再除錯時可能感覺不出來,但在實際執行中,就需要確認槽函式已經接受的訊號並且已經處理完成,之後再能使用self.iccid的值

訊號 SIGNAL 與槽 SLOT

我們可以借助connect函式進行初步了解 qmetaobject connection qobject connect const qobject sender,訊號的發出者 const char signal,觸發的訊號 const qobject receiver,訊號的接收者 const c...

pyqt5 訊號與槽

描述self.obj.destroyed.connect destroy cao 觸發後會執行槽函式,並給槽函式返回釋放物件 self.obj.blocksignals true 臨時打斷訊號 self.obj.objectnamechanged.disconnect 斷開訊號與槽的連線 self....

pyqt5 訊號與槽

訊號與槽 是pyqt的精髓,要多總結學習一下 定義通俗解釋 事件源 狀態發生改變的物件,它產生事件 source obj 按鈕 物件 事件目標 是想要被通知的物件 target obj 被點選 狀態發生改變 事件物件 封裝了事件源中的狀態變化 evnet obj 執行 呼叫函式 def use se...