1. 程式人生 > >pyqt 訊號與槽的理解

pyqt 訊號與槽的理解

這幾天開始學習python,覺得python這個語言確實非常的強大,也很靈活,由於需要所以用pyqt來搭一個簡單的介面,下面就只是自己的學習筆記。

pyqt中兩個object之間的通訊通過“訊號————槽”這個機制來進行的。

簡單來說就是:連個object要通訊,一個object建立一個訊號,然後像廣播那樣發出去(不管是否,有人接收,是誰接收)。而另一個需要接收的object 怎創立一個槽來接收訊號,一旦有匹配的(就好比不同的廣播調頻一樣)訊號,槽就能接收到:

當然訊號和槽之間有多著匹配方式。下面是pyqt reference中的原話:

  • A signal may be connected to many slots.
  • A signal may also be connected to another signal.
  • Signal arguments may be any Python type.
  • A slot may be connected to many signals.
  • Connections may be direct (ie. synchronous) or queued (ie. asynchronous).
  • Connections may be made across threads.
  • Signals may be disconnected.
http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html

具體的可以檢視上面連結。寫的比較清楚,

利用訊號傳遞引數的時候要注意,由於pyqt其實內部也是用C++實現(有點像是翻譯過去),所以有很多的python中的型別其實pyqt 轉化成C++語言後是一樣的,比如python中的list和dict 。所以在利用signal來傳遞引數的時候會有如下報錯:

' str is not supported as a pyqtSignal() type argument type

這個在文件當中也有提到,比如用int就可以傳遞引數,用str就不能傳遞引數。

訊號與槽的機制,可以理解為廣播與收音機的關係,而如何才能知道收音機的頻率呢?通過connect()函式將兩個繫結在一起就可以了,(確定收發頻率)。

具體的用法,網上,或者文件都有例子,也可以參考QT的文件(本質是一樣的)