IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Ouvrir un fichier [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut Ouvrir un fichier
    Bonjour ,
    j'essaie d'ouvrir un fichier sur le disque de mon ordinateur en cliquant sur un sous-menu: ouvrir un fichier
    avant j'utilisais tkFileDialog.askopenfilename avec Tkinter mais maintenant je travail avec PyQt , est ce qu'il existe une fonction qui permet de le faire en PyQt
    , mon but c'est quand je clique sur ouvrir j'appelle la fonction nécessaire qui permet d'ouvrir une fenêtre vers les fichiers de l'ordinateur et qui récupère le chemin du fichier sélectionner
    merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà un petit code de test qui répondra à ta question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 2.7
     
    import sys
    from PyQt4 import QtCore, QtGui
     
    class Fenetre(QtGui.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            fichier = QtGui.QFileDialog.getOpenFileName(self, 
                         u"Sélectionnez le fichier", 
                         u"toto.txt", 
                         u"Fichier texte (*.txt);;Tous (*.*)")
            fichier = unicode(fichier)
     
            if fichier!=u"":
                print u"fichier demandé:", fichier
            else:
                print u"aucun fichier demandé"
     
    app = QtGui.QApplication(sys.argv)
    fen = Fenetre()
    fen.show()
    sys.exit(app.exec_())
    Tyrtamos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    merci pour ta réponse , je l'ai adapté à mon travail
    j'ai un sous-menu ouvrir:
    self.actionOuvrir.triggered.connect(self.ouvrir)

    et ma fonction ouvrir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def ouvrir(self):
            fichier = QtGui.QFileDialog.getOpenFileName(self, 
                         u"Sélectionnez le fichier", 
                         u"toto.txt", 
                         u"Fichier texte (*.txt);;Tous (*.*)")
    et j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: QFileDialog.getOpenFileName(QWidget parent=None, QString caption=QString(), QString directory=QString(), QString filter=QString(), QString selectedFilter=None, QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_Fenetre'

    tu as une idée ? !

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Le 1er paramètre self de getOpenFileName doit venir d'une classe dérivée de QWidget, alors que la classe crée par QtDesigner hérite de object.

    Il faudrait revoir la structure de ton programme: la classe Fenetre doit dériver de QWidget ou de QMainWindow, et intégrer la classe crée par QtDesigner. Ce n'est pas qu'un problème de "style de programmation": il y a de nombreux avantages à faire comme ça.

    Tyrtamos

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    je comprend de ca que je dois avoir deux classe : une que je crée moi même et qui hérite de QWidget , et l'autre qui est crée par QT Designer et qui hérite d'un objet ,
    la classe Fenêtre qui est généré par Qt Designer hérite d'un objet si je remplace cet objet par QWidget mon programme ne fonctionne plus

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Re, où se trouve ta fonction ouvrir ? dans quelle classe ?

    Si c'est dans la classe de ta fenêtre, utilise le parent de tes QAction (très probablement MainWindow)

    Cela dit, si tu mets 'None' à la place, ça passe neuf fois sur dix.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    ma fonction se trouve dans la classe Ui_Fenêtre (généré par Qt Creator) qui hérite d'un objet
    je remplace quoi exactement par 'None' ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    mon fichier contient le code suivant qui permet d'afficher une fenetre avec un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'myclasse.ui'
    #
    # Created: Wed Mar 30 10:06:15 2011
    #      by: PyQt4 UI code generator 4.8.3
    #
    # WARNING! All changes made in this file will be lost!
    import sys
    from PyQt4 import QtCore, QtGui
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
    class Ui_myClasse(object):
     
        def setupUi(self, myClasse):
     
            myClasse.setObjectName(_fromUtf8("myClasse"))
            myClasse.resize(400, 300)
     
            self.centralWidget = QtGui.QWidget(myClasse)
            self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
     
            self.pushButton = QtGui.QPushButton(self.centralWidget)
            self.pushButton.setGeometry(QtCore.QRect(150, 80, 75, 23))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.charger)
            myClasse.setCentralWidget(self.centralWidget)
     
            self.menuBar = QtGui.QMenuBar(myClasse)
            self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 20))
            self.menuBar.setObjectName(_fromUtf8("menuBar"))
            myClasse.setMenuBar(self.menuBar)
            self.mainToolBar = QtGui.QToolBar(myClasse)
            self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
            myClasse.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
            self.statusBar = QtGui.QStatusBar(myClasse)
            self.statusBar.setObjectName(_fromUtf8("statusBar"))
            myClasse.setStatusBar(self.statusBar)
     
            self.retranslateUi(myClasse)
            QtCore.QMetaObject.connectSlotsByName(myClasse)
     
        def retranslateUi(self, myClasse):
            myClasse.setWindowTitle(QtGui.QApplication.translate("myClasse", "myClasse", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton.setText(QtGui.QApplication.translate("myClasse", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
     
     
     
     
        def charger(self):
            print "charger fonction"
            fichier = QtGui.QFileDialog.getOpenFileName(self, 
                         u"Sélectionnez le fichier", 
                         u"toto.txt", 
                         u"Fichier texte (*.txt);;Tous (*.*)")
            fichier = unicode(fichier)
     
            if fichier!=u"":
                print u"fichier demand�:", fichier
            else:
                print u"aucun fichier demand�"  
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_myClasse()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    et j'ai cette erreur quand je clique sur le bouton :
    u"Fichier texte (*.txt);;Tous (*.*)")
    TypeError: QFileDialog.getOpenFileName(QWidget parent=None, QString caption=QString(), QString directory=QString(), QString filter=QString(), QString selectedFilter=None, QFileDialog.Options options=0): argument 1 has unexpected type 'Ui_myClasse'

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    VinsS
    au faite dans ce lien : http://www.developpez.net/forums/d10...tegrer-classe/
    on a réglé le problème mais en créant deux classes séparées
    au début je voulais le faire dans une seule classe mais apparemment ce n'est pas possible vue que la fonction est dans la classe qui dérive d'un objet
    donc pour résoudre le problème tyrtamos m'as proposé de créer deux classes :
    1. une classe qui contient tous les objets graphiques qui définis dans Qt Creator ou Designer

    2- et une classe qui contient le code de toutes les connexions entre ces objets graphiques et les méthodes
    et ca marche mais avec deux classes
    bon pour le faire dans une classe il me parait que c'est impossible ( reste à montrer le contraire )

    si tu as une idée pour tous faire dans une seule classe
    merci de nous la proposer

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    C'est un copier-coller de tes deux codes, et j'ai connecté le bouton à la fin d la fonction setUp_ui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    # -*- coding: utf-8 -*-
     
    # Form implementation generated from reading ui file 'myclasse.ui'
    #
    # Created: Wed Mar 30 10:06:15 2011
    #      by: PyQt4 UI code generator 4.8.3
    #
    # WARNING! All changes made in this file will be lost!
    import sys
    from PyQt4 import QtCore, QtGui
     
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
    class Ui_myClasse(object):
     
        def setupUi(self, myClasse):
     
            myClasse.setObjectName(_fromUtf8("myClasse"))
            myClasse.resize(400, 300)
     
            self.centralWidget = QtGui.QWidget(myClasse)
            self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
     
            self.pushButton = QtGui.QPushButton(self.centralWidget)
            self.pushButton.setGeometry(QtCore.QRect(150, 80, 75, 23))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
     
     
            myClasse.setCentralWidget(self.centralWidget)
     
            self.menuBar = QtGui.QMenuBar(myClasse)
            self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 20))
            self.menuBar.setObjectName(_fromUtf8("menuBar"))
            myClasse.setMenuBar(self.menuBar)
            self.mainToolBar = QtGui.QToolBar(myClasse)
            self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
            myClasse.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
            self.statusBar = QtGui.QStatusBar(myClasse)
            self.statusBar.setObjectName(_fromUtf8("statusBar"))
            myClasse.setStatusBar(self.statusBar)
     
            # Rendre ma classe accessible aux autres fonctions
            self.myClasse = myClasse
     
            self.retranslateUi(myClasse)
     
            self.pushButton.clicked.connect(self.chargerFichier)
            QtCore.QMetaObject.connectSlotsByName(myClasse)
     
        def retranslateUi(self, myClasse):
            myClasse.setWindowTitle(QtGui.QApplication.translate("myClasse", "myClasse", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton.setText(QtGui.QApplication.translate("myClasse", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
     
        def chargerFichier(self):
            fichier = unicode(QtGui.QFileDialog.getOpenFileName(self.myClasse, 
                         u"Sélectionnez le fichier", 
                         u"toto.txt", 
                         u"Fichier texte (*.txt);;Tous (*.*)"))
     
     
            if fichier:
                print u"fichier demandé: ", fichier
            else:
                print u"aucun fichier demandé"
     
            # Autre version qui marche aussi bien:
            #fichier = unicode(QtGui.QFileDialog.getOpenFileName(None, ...
     
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        mc = Ui_myClasse()
        mc.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Par défaut
    ca marche très bien
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2004, 13h55
  2. ouvrir un fichier
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 10/01/2004, 23h04
  3. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo