[PyQt] Conflict between setuptools & requirements in official PyQt5 docs
Baz Walter
bazwal at ftml.net
Wed Feb 10 18:08:08 GMT 2016
On 10/02/16 17:24, Phil Thompson wrote:
> On 10 Feb 2016, at 4:49 pm, Jones, Bryan <bjones at ece.msstate.edu> wrote:
>>
>> def printDestroyed(qObject):
>> def destroyed():
>> print('destroyed {}'.format(qObject))
>> qObject.destroyed.connect(destroyed)
>>
>> def qtMain():
>> global app
>> app = QApplication(sys.argv)
>> printDestroyed(app)
>>
>> w = QWidget()
>> printDestroyed(w)
>> w.show()
>>
>> def gcCrash():
>> print('gcCrash')
>> qtMain()
>> gc.collect()
>
> I think that has something to do with the destroyed() slot being in a
> nested function. Also the destroyed signal can be tricky to deal with
> because it is emitted during the destruction of the QObject. I'm not
> saying there isn't a bug here, but I'm not sure it's a symptom of the
> crash on exit issue.
>
> Phil
This example can be made a bit clearer if the widget is explicitly
deleted like this:
w = QWidget()
w.setAttribute(Qt.WA_DeleteOnClose, True)
printDestroyed(w)
w.show()
The destroyed signal is now emitted, but it produces a somewhat
unexpected exception:
NameError: free variable 'qObject' referenced before assignment in
enclosing scope
This can be fixed by avoiding use of the enclosed variable in the nested
function:
def printDestroyed(qObject):
def destroyed(obj):
print('destroyed {}'.format(obj))
qObject.destroyed.connect(destroyed)
Which works okay, but still dumps core on exit, which I don't
understand. Any ideas why that is?
--
Regards
Baz Walter
More information about the PyQt
mailing list