如何使用好pyqt的signal和slot
2010-08-16 17:25
537 查看
如果你是使用PyQT 4.5之後的版本,除了傳統的signal/slot的連接方式外,你還多了一種比較符合Python樣式的寫法。
這種寫法是透過下面兩種新的PyQT物件來達成
pyqtSignal
pyqtSlot
正如其名, pyqtSingal是用來定義signal,而pyqtSlot
則是用於slot。
首先,我們來了解如何利用pyqtSignal來制定一個signal。且看下面的範例:
簡單的說,透過pyqtSignal,將signal也視為一種物件,所以signal所需的功能皆可由signal本身的method來定義。
所以整個signal的定義與使用完全符合物件導向的精神,程式看起來也更為直覺。
而pySlot則是一個Python的decorator,我們可以透過他來將一個method定義為slot。
整個slot的定義與舊的方法相較,頓時變得簡單許多。如果,你的UI使透過pyuic4所製作出來的,那 甚至可以透過
slot的名稱來指定要連結的元件與signal。舉例來說,如果你的UI中有一個名為myBtn的按鈕,想要連接他的clicked
signal。你只要在你繼承的視窗類別中,定義如下的slot:
PyQT會自動將這個slot與UI內的myBtn的clicked singal連接起來。真的是非常省事。
新的singal/slot的定義與使用方式是PyQT 4.5中的一大改革。可以讓PyQT程式更清楚易讀。如果你也是用PyQT 4.5以後的版本。
建議您開始使用這種新的方式吧。
come from:
http://blog.csdn.net/brave_heart_lxl/archive/2010/04/26/5530146.aspx
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#new-style-signal-and-slot-support
這種寫法是透過下面兩種新的PyQT物件來達成
pyqtSignal
pyqtSlot
正如其名, pyqtSingal是用來定義signal,而pyqtSlot
則是用於slot。
首先,我們來了解如何利用pyqtSignal來制定一個signal。且看下面的範例:
from PyQt4 import QtCore class MyQObject(QtCore.QObject): # 定義一個無參數的signal signal1 = QtCore.pyqtSignal() # 定義一個有一個整數參數的signal,並且name為qtSignal2。 signal2 = QtCore.pyqtSignal(int, name='qtSignal2') def connectSigSlot(self): # 利用pySignal物件本身提供的connect,我們可以輕易的將pySignal物件與對應的slot相連。 # 將signal1與myReceiver1連接起來。 signal1.connect(self.myReceiver1) # 將signal2與myReceiver2連接起來。 signal2.connect(self.myReceiver2) def myEmitter(self, arg): # 利用pyqtSignal物件所提供的emit function,我們就可以輕易的發出signal。 signal1.emit() signal2.emit(10) def myReceiver1(self): print 'myReceiver1 called' def myReceiver2(self, arg): print 'myReceiver2 called with argument value %d' % arg
簡單的說,透過pyqtSignal,將signal也視為一種物件,所以signal所需的功能皆可由signal本身的method來定義。
所以整個signal的定義與使用完全符合物件導向的精神,程式看起來也更為直覺。
而pySlot則是一個Python的decorator,我們可以透過他來將一個method定義為slot。
@QtCore.pyqtSlot () def mySlot(self): print 'mySlot received a signal') @QtCore.pyqtSlot (int) def mySlot2(self, arg): print 'mySlot2 received a signal with argument %d' % arg)
整個slot的定義與舊的方法相較,頓時變得簡單許多。如果,你的UI使透過pyuic4所製作出來的,那 甚至可以透過
slot的名稱來指定要連結的元件與signal。舉例來說,如果你的UI中有一個名為myBtn的按鈕,想要連接他的clicked
signal。你只要在你繼承的視窗類別中,定義如下的slot:
@QtCore.pyqtSlot (bool) def on_myBtn_clicked(self, checked): print 'myBtn clicked.'
PyQT會自動將這個slot與UI內的myBtn的clicked singal連接起來。真的是非常省事。
新的singal/slot的定義與使用方式是PyQT 4.5中的一大改革。可以讓PyQT程式更清楚易讀。如果你也是用PyQT 4.5以後的版本。
建議您開始使用這種新的方式吧。
come from:
http://blog.csdn.net/brave_heart_lxl/archive/2010/04/26/5530146.aspx
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#new-style-signal-and-slot-support
相关文章推荐
- 如何使用好pyqt的signal和slot
- 深入理解QT的SIGNAL\SLOT机制(一):SIGNAL\SLOT如何使用
- 如何在 pyqt 里面用一个 slot 处理很多 signal
- 如何使用Vue中的slot
- 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
- PyQt之玩转signal(信号)与slot(槽)一:介绍及简单实例
- (转)如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
- Ⅰ.2.5 如何使用Qt Signal Handles
- PyQt中如何使用界面文件(*.ui,*.qml)
- Qt的signal/slot机制的原理和使用
- 用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口 信号及槽如何使用
- [FPGA]如何使用SignalTap观察wire与reg值
- [PyQt]如何使用信号槽?
- 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
- Qt的signal和slot使用心得
- PyQt5学习教程11:几种signal与slot处理事件的方法
- Qt的signal/slot机制的原理和使用
- 如何使用SignalTap观察被综合掉的wire与reg值
- 教你如何在Django 1.6中正确使用 Signal
- 如何使用Vue中的slot