A signal may be either a TQt signal (specified using TQ_SIGNAL()) or a Python signal (specified using PYSIGNAL()).
A slot can be either a Python callable object, a TQt signal (specified using TQ_SIGNAL()), a Python signal (specified using PYSIGNAL()), or a TQt slot (specified using TQ_SLOT()).
You connect signals to slots (and other signals) as you would from C++. For example:
TQObject.connect(a,TQ_SIGNAL("TQtSig()"),pyFunction) TQObject.connect(a,TQ_SIGNAL("TQtSig()"),pyClass.pyMethod) TQObject.connect(a,TQ_SIGNAL("TQtSig()"),PYSIGNAL("PySig")) TQObject.connect(a,TQ_SIGNAL("TQtSig()"),TQ_SLOT("TQtSlot()")) TQObject.connect(a,PYSIGNAL("PySig"),pyFunction) TQObject.connect(a,PYSIGNAL("PySig"),pyClass.pyMethod) TQObject.connect(a,PYSIGNAL("PySig"),TQ_SIGNAL("TQtSig()")) TQObject.connect(a,PYSIGNAL("PySig"),TQ_SLOT("TQtSlot()")) |
When a slot is a Python method that corresponds to a TQt slot then a signal can be connected to either the Python method or the TQt slot. The following connections achieve the same effect.
sbar = TQScrollBar() lcd = TQLCDNumber() TQObject.connect(sbar,TQ_SIGNAL("valueChanged(int)"),lcd.display) TQObject.connect(sbar,TQ_SIGNAL("valueChanged(int)"),lcd,TQ_SLOT("display(int)")) |
The difference is that the second connection is made at the C++ level and is more efficient.
Disconnecting signals works in exactly the same way.
Any instance of a class that is derived from the TQObject class can emit a signal using the emit method. This takes two arguments. The first is the Python or TQt signal, the second is a Python tuple which are the arguments to the signal. For example:
a.emit(TQ_SIGNAL("clicked()"),()) a.emit(PYSIGNAL("pySig"),("Hello","World")) |
TQt allows a signal to be connected to a slot that requires fewer arguments than the signal passes. The extra arguments are quietly discarded. Python slots can be used in the same way.
The C++ declarations for menu items or TDEActions are similar to these examples:
int TQMenuData::insertItem (const TQString & text, const TQObject * receiver, const char * member, int accel = 0, int id = -1, int index = -1 ) TDEAction ( const TQString& text, int accel, const TQObject* receiver, const char* slot, TQObject* parent, const char* name = 0 ) |
Notice the "const TQObject* receiver, const char* slot" parameters for each declaration.
In PyKDE, these two parameters are replaced with a SINGLE parameter that specifies the slot to be connected to the menu item, toolbar button or TDEAction:
p = insertItem ("Open", self.slotOpen, 0, -1, -1) action = TDEAction ("Open", 0, self.slotOpen, None, 0) |
This substitution applies to appropriate methods in KStdAction, TDEAction and related subclasses, TDEAccelMenu and TDEToolBar