Discussion:PyQt/QDialog

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Message d'erreur[modifier le wikicode]

Avec la version PyQt4, ce programme renvoie l'erreur :

ImportError: No module named qt

Si je remplace from qt import * par from PyQt4 import *, j'ai :

NameError: name QApplication is not defined

JackPotte ($) 27 mai 2012 à 00:21 (CEST)

Selon l'exemple sur wikipédia en anglais :
from PyQt4.QtGui import *
-- ◄ David L • discuter ► 27 mai 2012 à 14:13 (CEST)
Merci, mais je retombe sur un problème quatre lignes plus bas :
NameError: name 'QString' is not defined
JackPotte ($) 27 mai 2012 à 16:09 (CEST)
Et si j'ajoute from PyQt4.QtCore import *, j'ai encore plus bas un problème, mais cette fois de variable et non plus de type :
NameError: name 's' is not defined
JackPotte ($) 27 mai 2012 à 16:15 (CEST)
Et en indentant tout dans init il n'y a plus d'erreur mais le programme ne fait rien. JackPotte ($) 27 mai 2012 à 16:36 (CEST)

Et que fait ceci ?

#!/usr/bin/python
# -*- coding : utf-8 -*-
#
# qdialog.py
# Programme exemple pour la classe QDialog
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class Demo(QApplication) :
   def init (self,args) :
      QApplication.init(self, args)
      # dialogue de sélection de fichier
      s = QFileDialog.getOpenFileName("", "", None, "Boite d'ouverture de fichier", "Choisissez un fichier")
      # conversions nécessaires entre QString et le type str de python
      h = QString("<h1>Vous avez choisi le fichier</h1>\n<i>")
      h.append(s)
      h.append("</i>")
      # message d'information sur le fichier sélectionné
      QMessageBox.information(None, "Fichier choisi", h)
if __name__ == "__main__" :
   x = Demo(sys.argv)
   x.exec_()

Si name (avant-dernière ligne) provoque une erreur, remplaces-le par __name__. -- ◄ David L • discuter ► 29 mai 2012 à 23:44 (CEST)

Je n'obtiens plus d'erreur que si je remplace cette avant-dernière ligne par if __name__ == '__main__':
Mais le programme ne fait toujours rien. JackPotte ($) 31 mai 2012 à 20:23 (CEST)
J'ai corrigé les 3 dernières lignes dans le code source qui précède.
-- ◄ David L • discuter ► 31 mai 2012 à 20:58 (CEST)
Boucle infinie. JackPotte ($) 31 mai 2012 à 21:23 (CEST)

Voici le code qui fonctionne de mon coté, sans utiliser de classe :

#!/usr/bin/python
# -*- coding : utf-8 -*-
#
# qdialog.py
# Programme exemple pour la classe QDialog
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

def main(args) :
      app=QApplication(args)
      # dialogue de sélection de fichier
      s = QFileDialog.getOpenFileName(None, "Boite d'ouverture de fichier")
      # conversions nécessaires entre QString et le type str de python
      h = QString("<h1>Vous avez choisi le fichier</h1>\n<i>")
      h.append(s)
      h.append("</i>")
      # message d'information sur le fichier sélectionné
      QMessageBox.information(None, "Fichier choisi", h)

if __name__ == "__main__" :
   main(sys.argv)

Et la version avec classe :

#!/usr/bin/python
# -*- coding : utf-8 -*-
#
# qdialog.py
# Programme exemple pour la classe QDialog
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

class Demo(QApplication) :
   def __init__ (self,args) :
      QApplication.__init__(self, args)
      # dialogue de sélection de fichier
      s = QFileDialog.getOpenFileName(None, "Boite d'ouverture de fichier")
      # conversions nécessaires entre QString et le type str de python
      h = QString("<h1>Vous avez choisi le fichier</h1>\n<i>")
      h.append(s)
      h.append("</i>")
      # message d'information sur le fichier sélectionné
      QMessageBox.information(None, "Fichier choisi", h)

if __name__ == "__main__" :
   x = Demo(sys.argv)

-- ◄ David L • discuter ► 31 mai 2012 à 22:22 (CEST)

Bravo ! Merci, je te tire mon chapeau. JackPotte ($) 31 mai 2012 à 23:52 (CEST)