Heim > Backend-Entwicklung > Python-Tutorial > QWidget: QApplication muss vor QPaintDevice erstellt werden

QWidget: QApplication muss vor QPaintDevice erstellt werden

WBOY
Freigeben: 2024-02-09 11:50:14
nach vorne
1186 Leute haben es durchsucht

QWidget:必须在 QPaintDevice 之前构造 QApplication

Frageninhalt

Zunächst verwende ich aus Kompatibilitätsgründen Windows 7-64 Bit und pyqwt5.2.0, pyqt4.5.4, numpy1.3.0, python2.6.2 32 Bit.

Wenn ich mein Skript ausführe, erscheint Folgendes:

QWidget: Must construct a QApplication before a QPaintDevice
Nach dem Login kopieren

Als ich im Internet nach Möglichkeiten suchte, das Problem zu beheben, bin ich auf qwidget继承了qobjectqpaintdevice(几乎我使用的每个对象都继承了它),而qmainwindow继承了qwidget gestoßen. Ich habe auch festgestellt, dass einige statische Funktionen versuchen, einige Klassen zu verwenden, aber ich verstehe nicht ganz, was das bedeutet.

Wenn es jemand erklären könnte, wäre ich sehr dankbar.

ps: Wir entschuldigen uns für etwaige Übersetzungsfehler.


Richtige Antwort


Aus Code-Sicht wird der Fehler durch Zeile 102 verursacht. Beim Laden eines Moduls erstellen Sie ein qwidget (更准确地说是 qmainwindow)。这发生在创建 qapplication vor .

Außerdem weiß ich nicht, warum Sie diese Startvariable haben, da sie anscheinend nicht verwendet wird.

Wenn Sie die hellobegin 对象创建它,请将其移动到 __init__-Methode verwenden möchten.

Herausgeber:

Wenn Sie beim Laden eines Moduls einen Begrüßungsbildschirm anzeigen möchten, müssen Sie die Anwendung über ein kleines, leichtes Modul starten. In diesem Modul werden Sie:

  1. Anwendung erstellen
  2. Begrüßungsbildschirm/Meldungsfeld öffnen
  3. Dann laden Sie andere Module

Damit alles reibungslos funktioniert, würde ich das Modul in einer separaten Funktion importieren und mit einem kleinen Trick sicherstellen, dass es erst startet, wenn die GUI bereit ist. Der Code sieht so aus:

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_())
Nach dem Login kopieren

wobei createsplashscreen die Funktion ist, die den Begrüßungsbildschirm erstellt

Das obige ist der detaillierte Inhalt vonQWidget: QApplication muss vor QPaintDevice erstellt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage