[PyQt] converting old signal/slot to new signal/slot
C C
coastalchaos at hotmail.co.uk
Thu May 28 15:34:16 BST 2015
I've just had a thought.
Perhaps in the old style they had to pass an object to the connect() so they chose to use the QtCore.QCoreApplication.instance() as an arbitrary qt object to connect the signals/slots?
On 28 May 2015, at 14:53, C C <coastalchaos at hotmail.co.uk> wrote:
> Florian,
>
> Thanks.
>
> Yes, I have put pyqtSignal() in my code.
>
> Here's the old style
>
> class DatabaseProxy(Proxy, QObject):
> databaseChanged = pyqtSignal(object)
>
> def __init__(self, url):
> # Call superclasses
> Proxy.__init__(
> self, self.NAME, DatabaseAdapter(url))
> QtCore.QObject.__init__(self)
>
> # Public attributes
> self.session = None
> def onRegister(self):
> """
> Create a new database session
> """
> # Create session
> self.session = self.new_event_session()
> self.connect(
> QtCore.QCoreApplication.instance(),
> QtCore.SIGNAL(b"databaseChanged(PyQt_PyObject)"),
> self.on_database_updated_signal,
> Qt.QueuedConnection
> )
>
>
>
> Here's the new style:-
>
>
> class DatabaseProxy(Proxy, QObject):
> databaseChanged = pyqtSignal(object)
>
> def __init__(self, url):
> # Call superclasses
> Proxy.__init__(
> self, self.NAME, DatabaseAdapter(url))
> QtCore.QObject.__init__(self)
>
> # Public attributes
> self.session = None
>
> def onRegister(self):
> """
> Create a new database session
> """
> # Create session
> self.session = self.new_event_session()
> self.databaseChanged.connect(
> self.on_database_updated_signal,
> Qt.QueuedConnection)
>
>
>
>
> The only thing I'm trying to work out is what happened to QtCore.QCoreApplication.instance() in the new style?
> Do i need to bring it back into play somehow? I'm just trying to understand the old style in this instance so I can ensure that I port from 4 to 5 cleanly without breaking functionality.
>
>
> Now i've changed the signal to the new style it not longer errors in the eclipse runner/debugger.
>
>
> Rob
>
>
>
>
> On 28 May 2015, at 13:15, Florian Bruhin <me at the-compiler.org> wrote:
>
>>> It looks as if you are trying to have your signal not just exist but pass a
>>> parameter? The syntax for that in pyQtSignal is a bit obscure and I'm not
>>> comfortable with it so maybe somebody else can write about that.
>>
>> It's quite simple, IMHO (at least as you don't need overloaded
>> signals):
>>
>> class myWidget( QWidget ):
>> databaseChanged = pyqtSignal(str)
>>
>> [...]
>>
>> # self.react_to_db is a callable taking one argument.
>> self.databaseChanged.connect( self.react_to_db )
>>
>> [...]
>>
>> if database_has_changed :
>> # database_name has to be a string
>> self.databaseChanged.emit(database_name)
>>
>> (also, note that it's pyqtSignal, not pyQtSignal)
>>
>> Florian
>>
>> --
>> http://www.the-compiler.org | me at the-compiler.org (Mail/XMPP)
>> GPG: 916E B0C8 FD55 A072 | http://the-compiler.org/pubkey.asc
>> I love long mails! | http://email.is-not-s.ms/
>> _______________________________________________
>> PyQt mailing list PyQt at riverbankcomputing.com
>> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>
> _______________________________________________
> PyQt mailing list PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20150528/64d30991/attachment-0001.html>
More information about the PyQt
mailing list