2012-01-12 4 views
3

Je travaille sur les applications pyqt4 et python26. J'ai créé des formulaires en utilisant qt designer (fichiers .ui). Je les ai converties en fichiers .py et .pyc. Mais quand j'essaie d'exécuter un fichier .py, la ligne de commande python va et vient en une seconde, le formulaire (fichier .ui correspondant) ne peut pas être vu ... ce qui peut être le problème??Exécution de fichiers python

ceci est mon code :(. Fichier py)

from DlgAbout_ui import Ui_DlgAbout 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

import resources 

class DlgAbout(QDialog, Ui_DlgAbout): 

    def __init__(self, parent=None): 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.logo.setPixmap(QPixmap(":/icons/faunalia_logo.png")) 

     text = self.txt.toHtml() 
     text = text.replace("$PLUGIN_NAME$", "RT Sql Layer") 
     self.txt.setHtml(text) 

Répondre

4

Tout d'abord, ne pas utiliser:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

Au lieu de cela:

from PyQt4 import QtCore, QtGui 

Et les modules de référence explicitement.

class DlgAbout(QtGui.QDialog, Ui_DlgAbout): 

etc.

Dans votre code, tout ce que vous avez fait est défini une boîte de dialogue. Vous n'avez défini aucune application principale à exécuter ou aucun moyen d'afficher la boîte de dialogue.

Pour un exemple, voici une application principale de base à exécuter:

from PyQt4 import QtGui 
import sys 


class MyMainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     super(MyMainWindow, self).__init__(parent) 
     self.form_widget = FormWidget(self) 
     self.setCentralWidget(self.form_widget) 


class FormWidget(QtGui.QWidget): 

    def __init__(self, parent): 
     super(FormWidget, self).__init__(parent) 
     self.layout = QtGui.QVBoxLayout(self) 

     self.button = QtGui.QPushButton("Button!") 
     self.layout.addWidget(self.button) 


if __name__ == "__main__": 
    app = QtGui.QApplication([]) 
    foo = MyMainWindow() 
    foo.show() 
    sys.exit(app.exec_()) 

Cela définit une fenêtre principale, et une forme (ce qui MyMainWindow met en place, comme vous pouvez le voir). Je puis vérifier si tel est le fichier principal en cours d'exécution (if __name__ == "__main__":), et je commence l'application (Le app = QtGui.QApplication([]), crée la fenêtre principale, et montre la fenêtre principale.

Dans votre cas, vous pouvez définir un application principale comme je l'ai fait, et le faire alerter votre QDialog

+0

merci beaucoup :) :) – poonam

+0

quand je déclare QDialog .__ init __ (self, parent) dans la classe FormWidget (QtGui.QWidget):, il donne une erreur en disant NameError : le nom global 'QDialog' n'est pas défini ...... aidez-moi ... – poonam

+0

Essayez 'QtGui.QDialog'. Vous aurez également besoin de changer la pixmap à 'QtGui.QPixmap'. C'est ce que je voulais dire par référence aux modules explicitement;) – TyrantWave

0

Votre code Python importe que certains modules et définit alors une nouvelle classe. Cependant, il ne fait rien avec la classe qu'il a définie. En d'autres termes, une fois que Python a fini de créer la nouvelle classe, elle est terminée et elle se termine. Je ne connais pas du tout PyQT, mais il est fort probable que vous deviez démarrer la boucle principale de l'interface graphique, et aussi instancier une instance de votre nouvelle classe et la transmettre à PyQT.