如何使用好pyqt的signal和slot

如果你是使用PyQT 4.5之後的版本,除了�鹘y的signal/slot的�B接方式外,你�多了一�N比�^符合Python�邮降��法。 �@�N��法是透�^下面�煞N新的PyQT物件�磉_成
  • pyqtSignal
  • pyqtSlot
正如其名, pyqtSingal是用�矶��xsignal,而 pyqtSlot �t是用於slot。
首先,我���砹私馊绾卫�用pyqtSignal�碇贫ㄒ��signal。且看下面的�例:
 from PyQt4 import QtCore



class MyQObject(QtCore.QObject):

# 定�x一���o��档�signal

signal1 = QtCore.pyqtSignal()



# 定�x一��有一��整���档�signal,�K且name��qtSignal2。

signal2 = QtCore.pyqtSignal(int, name='qtSignal2')



def connectSigSlot(self):

# 利用pySignal物件本身提供的connect,我��可以�p易的��pySignal物件�c���的slot相�B。



# ��signal1�cmyReceiver1�B接起�怼�

signal1.connect(self.myReceiver1)

# ��signal2�cmyReceiver2�B接起�怼�

signal2.connect(self.myReceiver2)



def myEmitter(self, arg):

# 利用pyqtSignal物件所提供的emit function,我��就可以�p易的�l出signal。

signal1.emit()

signal2.emit(10)



def myReceiver1(self):

print 'myReceiver1 called'



def myReceiver2(self, arg):

print 'myReceiver2 called with argument value %d' % arg

��蔚恼f,透�^pyqtSignal,��signal也��橐环N物件,所以signal所需的功能皆可由signal本身的method�矶��x。 所以整��signal的定�x�c使用完全符合物件��向的精神,程式看起�硪哺��橹庇X。
而pySlot�t是一��Python的decorator,我��可以透�^他��⒁��method定�x��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的定�x�c�f的方法相�^,�D�r�得��卧S多。如果,你的UI使透�^pyuic4所�u作出�淼模�那 甚至可以透�^ slot的名�Q�碇付ㄒ��B�Y的元件�csignal。�e例�碚f,如果你的UI中有一��名��myBtn的按�o,想要�B接他的clicked signal。你只要在你�^承的�窗��e中,定�x如下的slot:
@QtCore.pyqtSlot
(bool)

def on_myBtn_clicked(self, checked):

print 'myBtn clicked.'



PyQT��自��⑦@��slot�cUI�鹊�myBtn的clicked singal�B接起�怼U娴氖欠浅J∈隆�
新的singal/slot的定�x�c使用方式是PyQT 4.5中的一大改革。可以�PyQT程式更清楚易�x。如果你也是用PyQT 4.5以後的版本。 建�h您�_始使用�@�N新的方式吧。
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

你可能感兴趣的:(Signal,信号槽,PyQt,SLOT,pyqthon)