首頁  >  文章  >  後端開發  >  QWidget:必須在 QPaintDevice 之前建構 QApplication

QWidget:必須在 QPaintDevice 之前建構 QApplication

WBOY
WBOY轉載
2024-02-09 11:50:141141瀏覽

QWidget:必须在 QPaintDevice 之前构造 QApplication

問題內容

首先,出於相容性原因,我使用windows 7-64 位元和pyqwt5.2.0、pyqt4.5.4、numpy1.3.0 、python2.6.2 32 位元。

執行我的腳本時會出現:

QWidget: Must construct a QApplication before a QPaintDevice

上網,尋找一些方法來修復它,我發現qwidget繼承了qobjectqpaintdevice(幾乎我使用的每個物件都繼承了它),而qmainwindow繼承了qwidget。我還發現某些靜態函數正在嘗試使用某些類,但我不太明白它的含義。

如果有人能解釋一下,我將不勝感激。

ps:對於任何翻譯錯誤,我們深表歉意。


正確答案


從程式碼來看,錯誤是由於第 102 行造成的。在載入模組時,您建立了一個 qwidget (更準確地說是 qmainwindow)。這發生在創建 qapplication 之前

另外,我不知道為什麼你有這個開始變量,因為它似乎沒有被使用。

如果您想使用 hellobegin 物件建立它,請將其移至 __init__ 方法中。

編輯:

如果您想在載入模組時顯示啟動畫面,則需要由小型、輕量級模組啟動應用程式。在本模組中,您將:

  1. 建立 qapplication
  2. 開啟啟動畫面/訊息框
  3. 然後才載入其他模組

為了讓一切順利進行,我會在單獨的函數中導入模組,並使用一個小技巧來確保它僅在 gui 準備好後才啟動。程式碼如下所示:

from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QTimer
def startApp():
    import m1
    import m2
    wnd = createWindow()
    wnd.show()
import sys
app = QApplication(sys.argv)
splash = createSplashScreen()
splash.show()
QTimer.singleShot(1, startApp) # call startApp only after the GUI is ready
sys.exit(app.exec_())

其中 createsplashscreen 是建立啟動畫面的函數

以上是QWidget:必須在 QPaintDevice 之前建構 QApplication的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除