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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

? ? ? ? 信號和槽是一種高級接口,應用于對象之間的通信,它是 QT 的核心特性,也是 QT 區別于其它工具包的重要地方。它為高層次的事件處理自動生成所需要的附加代碼。在我們所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一個回調函數用于響應它們能觸發的每個動作,這個回調函數通常是一個指向某個函數的指針。但是,在 QT 中信號和槽取代了這些凌亂的函數指針,使得我們編寫這些通信程序更為簡潔明了。
? ? ? ? 所有從 QObject 或其子類 ( 例如 Qwidget) 派生的類都能夠包含信號和槽。當對象改變其狀態時,信號就由該對象發射 (emit) 出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制。
? ? ? ? 你可以將很多信號與單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至于將一個信號與另外一個信號相連接也是可能的,這時無論第一個信號什么時候發射系統都將立刻發射第二個信號。總之,信號與槽構造了一個強大的部件編程機制。


? ? ? ? 說實話對于像我這樣的新手來說看著就蛋疼,想學會它沒辦法,我們還是簡化一下概念吧:
? ? ? ? 所有QObject類都可以使用信號槽,換句話來說繼承自pyqt中的類基本上都可以使用信號槽機制。當然非QObject也是可以通過其他一些辦法來使用信號槽的。
僅僅有了信號和槽是不行的,我們還需要了解:
? ? ? ? 信號(Signal)、槽(slot)、連接(connect)、動作事件(action)、發射(emit)、發送者、接受者等等一些列的知識。好吧,別搞的那么復雜行不行,我們還是學學該怎么用吧。

? ? ? ? 在Qt Designer中為我們提供了一些基本的信號槽方法,我們來看看:

? ? ? ? 點擊工具欄上的“編輯信號/槽”,進入信號槽編輯模式,我們可以直接在發送者(button)上按住鼠標左鍵不放,拖動到接收者(Form窗體)上。這樣就建立起了連接。


? ? ? ? ?接著,會彈出配置連接對話框。


? ? ? 左邊是發送者(按鈕)的信號(動作事件),右邊是接收者(窗體)的槽(動作事件)

? ? ? 如圖所示,我信號選擇的是clicked,槽選擇的是close

? ? ? ? 我們看一下編譯后生成的代碼:
self.quitButton.clicked.connect(Form.close)

? ? ? ? 實現的功能是:當按鈕點擊之后關閉窗體。
? ? ? ?流程:按鈕是信號發送者,當點擊按鈕之后會發送一個信號出去,通過這段代碼程序內部的通訊機制知道這個按鈕的點擊事情被連接到窗體的關閉事件上去了,然后通知接受者窗體,你該運行槽函數close了!

那么我們怎么能執行自己的“槽”呢?

[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)???#槽函數不用加括號??
  • ????def?myPrint(self):????????????????????????????????#定義槽??
  • ????????print("helloWorld")??
  • ????
  • if?__name__=="__main__":????
  • ????import?sys????
  • ????
  • ????app=QtWidgets.QApplication(sys.argv)????
  • ????myshow=mywindow()????
  • ????myshow.show()????
  • ????sys.exit(app.exec_())????

  • 小提示:

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

    新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。