bricky149 bricky149 - 9 days ago 7
Python Question

"Must construct a QApplication before a QPaintDevice" from QWidget

I'm busy porting an IRC client from Python 2.6 to 3.3 and I've stumbled across a problem with PyQt. The application originally used PyQt4, I'm also recoding it to get it to work with PyQt5 but I'm getting an error without any line references: "QWidget: Must construct a QApplication before a QPaintDevice". I have narrowed the issue down to a single class.

I understand it's been asked here many times already but I couldn't extract a sure-fire answer for my case so I apologise if my question appears ignorant.

Here's some of the code: http://pastebin.com/Lj60icgQ

Stupid me didn't put the "app" variable just after the import statements when I should've. I then put the rest of the code at the bottom of the main file and I'm not longer getting that error. Thanks for the help!

Answer

I'm afraid single file will not be enough in this situation - the execution flow is not clear just from this one module. The message in question usually appears when you try to use some resources/create some objects that require initialized QApplication - like QIcon, for example.

Instantiation of Qt-based GUI application usually looks like this:

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = MainWindowClass()
    main_window.show()
    sys.exit(app.exec_())