PyQt5学习笔记05----Qt Designer信号槽
先入一些信號槽的基本介紹:
? ? ? ? 信號和槽是一種高級接口,應(yīng)用于對象之間的通信,它是 QT 的核心特性,也是 QT 區(qū)別于其它工具包的重要地方。它為高層次的事件處理自動生成所需要的附加代碼。在我們所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一個回調(diào)函數(shù)用于響應(yīng)它們能觸發(fā)的每個動作,這個回調(diào)函數(shù)通常是一個指向某個函數(shù)的指針。但是,在 QT 中信號和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡潔明了。? ? ? ? 所有從 QObject 或其子類 ( 例如 Qwidget) 派生的類都能夠包含信號和槽。當(dāng)對象改變其狀態(tài)時,信號就由該對象發(fā)射 (emit) 出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當(dāng)作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制。
? ? ? ? 你可以將很多信號與單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至于將一個信號與另外一個信號相連接也是可能的,這時無論第一個信號什么時候發(fā)射系統(tǒng)都將立刻發(fā)射第二個信號。總之,信號與槽構(gòu)造了一個強大的部件編程機制。
? ? ? ? 說實話對于像我這樣的新手來說看著就蛋疼,想學(xué)會它沒辦法,我們還是簡化一下概念吧:
? ? ? ? 所有QObject類都可以使用信號槽,換句話來說繼承自pyqt中的類基本上都可以使用信號槽機制。當(dāng)然非QObject也是可以通過其他一些辦法來使用信號槽的。
僅僅有了信號和槽是不行的,我們還需要了解:
? ? ? ? 信號(Signal)、槽(slot)、連接(connect)、動作事件(action)、發(fā)射(emit)、發(fā)送者、接受者等等一些列的知識。好吧,別搞的那么復(fù)雜行不行,我們還是學(xué)學(xué)該怎么用吧。
? ? ? ? 在Qt Designer中為我們提供了一些基本的信號槽方法,我們來看看:
? ? ? ? 點擊工具欄上的“編輯信號/槽”,進入信號槽編輯模式,我們可以直接在發(fā)送者(button)上按住鼠標(biāo)左鍵不放,拖動到接收者(Form窗體)上。這樣就建立起了連接。
? ? ? ? ?接著,會彈出配置連接對話框。
? ? ? 左邊是發(fā)送者(按鈕)的信號(動作事件),右邊是接收者(窗體)的槽(動作事件)
? ? ? 如圖所示,我信號選擇的是clicked,槽選擇的是close
? ? ? ? 我們看一下編譯后生成的代碼:
self.quitButton.clicked.connect(Form.close)
? ? ? ? 實現(xiàn)的功能是:當(dāng)按鈕點擊之后關(guān)閉窗體。
? ? ? ?流程:按鈕是信號發(fā)送者,當(dāng)點擊按鈕之后會發(fā)送一個信號出去,通過這段代碼程序內(nèi)部的通訊機制知道這個按鈕的點擊事情被連接到窗體的關(guān)閉事件上去了,然后通知接受者窗體,你該運行槽函數(shù)close了!
那么我們怎么能執(zhí)行自己的“槽”呢?
[python]?view plaincopy
小提示:
? ? ? ? 槽其實就個函數(shù)(方法),Qt5中的槽函數(shù)不在限定必須是slot,可以是普通的函數(shù)、類的普通成員函數(shù)、lambda函數(shù)等。編譯期間就會檢查信號與槽是否存在!
? ? ? ? 信號的connect連接最好放在__init__析構(gòu)函數(shù)里面,這樣只會聲明一次連接,如果在類方法(函數(shù)中)使用的話,要記得disconnect,否則connect會連接多次,導(dǎo)致程序異常。
? ? ? ? 信號槽函數(shù)不用加 (),否則可能會導(dǎo)致連接異常。
總結(jié)
以上是生活随笔為你收集整理的PyQt5学习笔记05----Qt Designer信号槽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU5863 cjj's string
- 下一篇: 【C语言重点难点精讲】C语言中的重要符号