Search code examples
pythonpyqt4

PyQt window closes immediately after opening


I am getting an issue when trying to open a PyQt window.

The code below is an example of my original code. When I imported the module in import Test and ran test.Start(), I got the following error:

QCoreApplication::exec: The event loop is already running

After some research, I found out it was because I had already already made a QApplication.

test.py....
import sys

def Start():
    app = QApplication(sys.argv)
    m = myWindow()
    m.show()
    app.exec_()

class myWindow():....

if __name__ == "__main__":
    Start()

So then I read that I could rewrite my code like this and it would fix the error:

test.py....

def Start():
    m = myWindow()
    m.show()


class myWindow():....

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    Start()
    app.exec_()

Now I no longer get the QCoreApplication::exec: The event loop is already running error, but my window closes almost immediately after opening.


Solution

  • You need to keep a reference to the opened window, otherwise it goes out of scope and is garbage collected, which will destroy the underlying C++ object also. Try:

    def Start():
        m = myWindow()
        m.show()
        return m
    
    
    class myWindow():....
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        window = Start()
        app.exec_()