[PyQt] Beginners - signal - slots - question

Phil Thompson phil at riverbankcomputing.co.uk
Sat Dec 22 09:51:07 GMT 2007


On Saturday 22 December 2007, Henrik Pauli wrote:
> On Friday 21 December 2007, Jochen Georges wrote:
> > On Friday 21 December 2007 12:26:02 Henrik Pauli wrote:
> > > On Friday 21 December 2007, Jochen Georges wrote:
> > > > Hello,
> >
> >  ..snip
> >
> > > > Which is the right QLineEdit-Signal?
> > > > 	the action should start when return is pressed, but the
> > > > 	signal "returnPressed" has no parameter "QString"
> > > > 	and
> > > > 	textChanged(QString) or textEdited(QString) react on every single
> > > > input How do i place my own method, that changes the text?
> > >
> > > Here's a hint that might get you going:
> > >
> > > Create a new slot for your own use :)  In PyQt it’s just a python
> > > method, you can do anything in it.
> >
> > OK, that works: (but it does not look like good style, does it?)
> >
> > QtCore.QObject.connect(self.lineEdit,QtCore.SIGNAL("returnPressed()"),sel
> >f. blabla)
> >
> > def blabla(self):
> > 	#some code
> >         self.lb_ergebnis.setText(myString)
>
> This is fine, really!
>
> > #---------
> >
> > QtCore.QObject.connect(self.lineEdit,QtCore.SIGNAL("returnPressed()"),
> > 		self.lb_ergebnis, QtCore.SLOT(setText(self.blabla)))
> > def blabla(self):
> > 	#some code
> >         return myString
> >
> > mmhhh ...
> >
> > how can i pass an argument to the slot-name?
>
> You don’t.  Slots take as many arguments as they’re prepared for (in case
> of setText, one), and if the signal sends one, then it’ll work.  Okay, it’s
> a bit more complicated than that, but that’s the core idea really.
>
> So if you wanted to do it fully signalslotted, you'd make a (py)signal
> which takes myString as an argument, connect it to setText, and emit it
> with blabla.  (Unless I'm wrong... but that’s how I remember.  Having to do
> Perl GTK stuff at work doesn’t help me keep my PyQt knowledge rustfree)
>
> QtCore.QObject.connect(self.lineEdit,QtCore.SIGNAL("returnPressed()"),
>                           self.blabla)
> QtCore.QObject.connect(self, QtCore.PYSIGNAL("blabla2"),
>                           self.lb_ergebnis,
> QtCore.SLOT("setText(QString)")) ## no () after a pysignal's name
>
> def blabla(self):
> 	#some code
> 	self.emit( PYSIGNAL("blabla2"), (myString,) )
> ## N.B. the comma after the argument, that’s so it's a tuple.

Note that this is PyQt3. In PyQt4 it is...

    self.emit(QtCore.SIGNAL("blabla2"), myString)

Phil



More information about the PyQt mailing list