Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Must construct a QApplication before a QPaintDevice" from QWidget

Tags:

python

qt

pyqt

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!

like image 892
bricky149 Avatar asked Oct 15 '13 14:10

bricky149


2 Answers

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_())
like image 85
AlexVhr Avatar answered Nov 07 '22 05:11

AlexVhr


The error message is pretty clear: you are trying to draw a QWidget (which in PyQt4.5 inherits QPaintDevice and QObject) before you instantiate the QApplication. But your code is too large for reading it line by line. Try to isolate the error building a small application and adding functionality step by step. Or use a debugger (IDEs like Eclipse + PyDev are supposed to be able to debug your app). Or provide us with a small, self contained example of the problem.

like image 45
Vicent Avatar answered Nov 07 '22 04:11

Vicent