2013-10-15 2 views
3

Python 2.6에서 3.3으로 IRC 클라이언트를 이식하는 중입니다. PyQt의 문제를 발견했습니다. 이 응용 프로그램은 원래 PyQt4를 사용했으며 PyQt5와 함께 작동하도록 코드를 다시 작성했지만 "QWidget : QPaintDevice 전에 QApplication을 생성해야합니다"라는 라인 참조없이 오류가 발생합니다. 문제를 하나의 클래스로 좁혔습니다.QWidget에서 QApplication 전에 QApplication을 생성해야합니다.

이미 여러 번 여기에서 질문을 받았지만 내 경우에는 확실한 답을 추출 할 수 없으므로 내 질문이 무식하게 표시되면 사과하겠습니다.

여기에 코드의 일부입니다 : 내가 했어야 할 때 http://pastebin.com/Lj60icgQ

바보 나 그냥 import 문 후 "응용 프로그램"변수를 넣지 않았다. 그런 다음 나머지 코드를 주 파일의 맨 아래에 놓고 더 이상 오류가 발생하지 않습니다. 도와 주셔서 감사합니다!

+2

오류 메시지에 모든 것이 표시됩니다. QApplication을 초기화하기 전에 어딘가에서 드로잉을 사용하려고합니다. –

+0

버튼과 창을 그리려는 것을 알고 있지만 QApplication을 초기화하는 방법을 모르겠습니다. – bricky149

답변

6

이 상황에서는 하나의 파일로는 충분하지 않습니다. 실행 흐름이이 모듈 하나에서 분명하지 않습니다. 문제의 메시지는 대개 일부 리소스를 사용하거나 QIcon과 같이 초기화 된 QApplication이 필요한 객체를 만들려고 할 때 나타납니다. Qt를 기반 GUI 응용 프로그램의

인스턴스화는 일반적으로 다음과 같습니다

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

필자는 디버거를 사용하여 이클립스에서 침해가되는 코드를 찾으려고 노력할 것이다. – bricky149

+1

BTW, 당신은 app = QApplication()을 만들었지 만 app.exec_()를 호출하지 않았기 때문에 앱이 메인 ​​루프에 진입하지 않았습니다. – AlexVhr

1

오류 메시지는 매우 분명하다 : 당신이 QWidget (PyQt4.5QPaintDeviceQObject을 상속하는) 인스턴스화하기 전에를 그릴 노력하고있다 QApplication. 그러나 코드를 한 줄씩 읽으려면 너무 큽니다. 작은 응용 프로그램을 빌드하고 단계별로 기능을 추가하는 오류를 격리하십시오. 또는 디버거를 사용하십시오 (예 : Eclipse + PyDev과 같은 IDE를 사용하여 앱을 디버깅 할 수 있음). 또는 문제의 작은 자체 포함 된 예를 제공하십시오.

관련 문제