Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyQt window closes immediately after opening

Tags:

python

pyqt4

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.

like image 381
pepetd Avatar asked Apr 17 '13 20:04

pepetd


1 Answers

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_()
like image 136
mata Avatar answered Oct 03 '22 22:10

mata