[PyQt] PyQt 5.1 App doesn't exit after QQuickView closed

Glenn Ramsey gr at componic.co.nz
Tue Aug 27 20:03:46 BST 2013


On 28/08/13 02:16, Phil Thompson wrote:
> On Tue, 27 Aug 2013 09:26:55 +1200, Glenn Ramsey <gr at componic.co.nz>
> wrote:
>> Hi,
>>
>> In the following example, the application doesn't exit after the
>> QQuickView
>> window is closed. Is this the correct behaviour or is it a bug? This is
>> using
>> snapshot-693a95fde3fa on OSX 10.8.4 with Qt 5.1, PyQt 5.1 and macports
>> python
>> built as 32 bit.
>>
>> Glenn
>>
>> import sys
>> import os
>>
>> from PyQt5 import QtCore
>> from PyQt5 import QtWidgets
>> from PyQt5 import QtQuick
>>
>> def main():
>>       app = QtWidgets.QApplication(sys.argv)
>>       quickview = QtQuick.QQuickView()
>>       if getattr(sys, 'frozen', None):
>>           basedir = sys._MEIPASS
>>       else:
>>           basedir = os.path.dirname(__file__)
>>       quickview.setSource(QtCore.QUrl.fromLocalFile(os.path.join(basedir,
>
>> 'hello.qml')))
>>       quickview.show()
>>
>>       app.exec_()
>>
>> if __name__ == "__main__":
>>       main()
>>
>>
>> hello.qml:
>>
>> import QtQuick 2.0
>>
>> Rectangle {
>>       width: 360
>>       height: 360
>>       Text {
>>           anchors.centerIn: parent
>>           text: "Hello World"
>>       }
>>       MouseArea {
>>           anchors.fill: parent
>>           onClicked: {
>>               Qt.quit();
>>           }
>>       }
>> }
>
> You need to connect up the engine's quit() signal...
>
> quickview.engine().quit.connect(app.quit)
>
> Phil
>

That only works if I either add "global app" to main or bind "app" to a 
functools.partial.

Glenn




More information about the PyQt mailing list