Maison  >  Article  >  développement back-end  >  QWidget : QApplication doit être construit avant QPaintDevice

QWidget : QApplication doit être construit avant QPaintDevice

WBOY
WBOYavant
2024-02-09 11:50:141143parcourir

QWidget:必须在 QPaintDevice 之前构造 QApplication

Contenu de la question

Tout d'abord, pour des raisons de compatibilité, j'utilise Windows 7-64 bits et pyqwt5.2.0, pyqt4.5.4, numpy1.3.0, python2.6.2 32 bits.

Lorsque j'exécute mon script, ceci apparaît :

QWidget: Must construct a QApplication before a QPaintDevice

En surfant sur Internet à la recherche de moyens de résoudre ce problème, j'ai trouvé qwidget继承了qobjectqpaintdevice(几乎我使用的每个对象都继承了它),而qmainwindow继承了qwidget. J'ai également constaté que certaines fonctions statiques tentent d'utiliser certaines classes, mais je ne comprends pas très bien ce que cela signifie.

Si quelqu'un pouvait l'expliquer, je lui serais très reconnaissant.

ps : Nous nous excusons pour toute erreur de traduction.


Bonne réponse


Du point de vue du code, l'erreur est provoquée par la ligne 102. Lors du chargement d'un module, vous créez un qwidget (更准确地说是 qmainwindow)。这发生在创建 qapplication avant .

De plus, je ne sais pas pourquoi vous avez cette variable de démarrage car elle ne semble pas être utilisée.

Si vous souhaitez utiliser la méthode hellobegin 对象创建它,请将其移动到 __init__.

Éditeur :

Si vous souhaitez afficher un écran de démarrage lorsqu'un module est chargé, vous devez lancer l'application à partir d'un module petit et léger. Dans ce module, vous allez :

  1. Créer une qapplication
  2. Ouvrir l'écran de démarrage/la boîte de message
  3. Puis chargez d'autres modules

Pour que tout fonctionne correctement, j'importerais le module dans une fonction distincte et j'utiliserais une petite astuce pour m'assurer qu'il ne démarre que lorsque l'interface graphique est prête. Le code ressemble à ceci :

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 est la fonction qui crée l'écran de démarrage

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer