2013-10-15 31 views
3

我很忙移植在Python 2.6的IRC客戶端3.3和我經歷了一個偶然的問題與PyQt的。最初使用PyQt4的應用程序,我也重新編碼它得到它與PyQt5工作,但我發現了一個錯誤,沒有任何行引用:「QWidget的:必須一個一個QPaintDevice之前構建的QApplication」。我已將問題縮小到一個班級。「必須構造一個QApplication的一個的QPaintDevice之前」從QWidget中

我明白它已經已經在這裏問了很多次,但讓我道歉,如果我的問題就顯得無知的我不能提取神火回答我的情況。

下面是一些代碼:http://pastebin.com/Lj60icgQ

愚蠢的我並沒有把「應用」變量剛導入語句後,當我應該。然後我把其餘的代碼放在主文件的底部,我不再發生那個錯誤。謝謝您的幫助!

+2

你的錯誤消息說明了一切。在初始化QApplication之前,您正嘗試在某處使用繪圖。 –

+0

我知道它試圖繪製按鈕和窗口,但我不知道如何初始化QApplication,以便它可以做到這一點。 – bricky149

回答

6

恐怕單個文件將不足以在這種情況下 - 執行流程不清晰距離這一個模塊。當你嘗試使用某些資源/創建一些需要初始化QApplication的對象時(例如QIcon),通常會出現有問題的消息。基於Qt的GUI應用程序的

實例化通常是這樣的:

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

我會嘗試使用調試器來查找Eclipse中的代碼侵權位。 – bricky149

+1

順便說一下,您創建了app = QApplication(),但從未調用過app.exec_(),所以該應用程序從未進入主循環。 – AlexVhr

1

的錯誤信息是很清楚的:你想畫一個QWidget(在PyQt4.5繼承QPaintDeviceQObject)實例化之前QApplication。但是你的代碼太大,不適合逐行閱讀。嘗試隔離構建小應用程序的錯誤並逐步添加功能。或使用調試器(集成開發環境就像Eclipse + PyDev都應該能夠調試您的應用程序)。或者向我們提供一個小問題的獨立示例。

相關問題