日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyQt5学习笔记05----Qt Designer信号槽

發(fā)布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyQt5学习笔记05----Qt Designer信号槽 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先入一些信號槽的基本介紹:

? ? ? ? 信號和槽是一種高級接口,應(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
  • from?PyQt5?import?QtWidgets????
  • from?untitled?import?Ui_Form????
  • """點擊按鈕,在控制臺輸出helloworld"""????
  • class?mywindow(QtWidgets.QWidget,Ui_Form):????
  • ????def?__init__(self):????
  • ????????super(mywindow,self).__init__()????
  • ????????self.setupUi(self)??
  • ????????self.myButton.clicked.connect(self.myPrint)???#槽函數(shù)不用加括號??
  • ????def?myPrint(self):????????????????????????????????#定義槽??
  • ????????print("helloWorld")??
  • ????
  • if?__name__=="__main__":????
  • ????import?sys????
  • ????
  • ????app=QtWidgets.QApplication(sys.argv)????
  • ????myshow=mywindow()????
  • ????myshow.show()????
  • ????sys.exit(app.exec_())????

  • 小提示:

    ? ? ? ? 槽其實就個函數(shù)(方法),Qt5中的槽函數(shù)不在限定必須是slot,可以是普通的函數(shù)、類的普通成員函數(shù)、lambda函數(shù)等。編譯期間就會檢查信號與槽是否存在!
    ? ? ? ? 信號的connect連接最好放在__init__析構(gòu)函數(shù)里面,這樣只會聲明一次連接,如果在類方法(函數(shù)中)使用的話,要記得disconnect,否則connect會連接多次,導(dǎo)致程序異常。
    ? ? ? ? 信號槽函數(shù)不用加 (),否則可能會導(dǎo)致連接異常。

    新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的PyQt5学习笔记05----Qt Designer信号槽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。