[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