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 :

Intégrer une classe dans une autre


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 Intégrer une classe dans une autre
    Bonjour
    comment faire pour intégrer une classe crée par QtDesigner ou QT Creator ( dérivé d'un objet ) dans une classe qui hérite QWidget ?
    merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,
    Je suppose que vous avez converti le my_dialog.ui construit par Qt Designer en ui_my_dialog.py. A l'intérieur, il y a une classe qui devrait s'appeler Ui_MyDialog.

    Dans le module/script qui utilisera la classe, il faudra faire 'au moins':
    import ui_my_dialog # en supposé "dans le même répertoire"

    Comme Python est "multiple inheritance", çà peut s'écrire:
    class MyWidget(QWidget, ui_my_dialog.Ui_MyDialog): pass

    Mais vous pouvez "coller" les deux par aggrégation composite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyWidget(QWidget):
            ...
            self._dialog = ui_my_dialog.Ui_MyDialog(self)
            ...
    - W
    PS: Avec Qt, je ne vois pas l'intérêt de passer par héritage multiple dans ce cas.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    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à ce que je fais:

    - création de la fenêtre graphique avec QtDesigner => fichier prog_ui.ui. La classe crée est, par exemple: Ui_MainWindow dérivant de object.

    - conversion en .py avec pyuic4 => fichier: prog_ui.py.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pyuic4 prog_ui.ui -o prog_ui.py
    - création du programme principal .py comme suit:

    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
     
    from PyQt4 import QtCore, QtGui
    from prog_ui import Ui_MainWindow
     
    class Fenetre(QtGui.QMainWindow)
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            #
            # suite: les objets venant de QtDesigner sont préfixés par self.ui
            #
     
    app = QtGui.QApplication(sys.argv)
    fen = Fenetre()
    fen.show()
    sys.exit(app.exec_())
    Une autre solution plus simple est possible: la fenêtre peut hériter en même temps de QMainWindow et de Ui_MainWindow grâce au fait que Ui_MainWindow dérive de object. En effet, il est interdit que l'on hérite de 2 objets QT en même temps! Dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Fenetre(QtGui.QMainWindow, Ui_MainWindow)
    Et les objets créés par QtDesigner sont préfixés simplement par self.

    En tout cas: c'est une très mauvaise idée d'éditer directement le fichier issu de QtDesigner, car la moindre modif ultérieure par QtDesigner fait perdre toutes les modifications.

    Tyrtamos

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    En effet, il est interdit que l'on hérite de 2 objets QT en même temps! Dans ce cas:
    Il n'est pas "interdit", mais tous les objets ne s'y prêtent pas:
    - pour des questions de MRO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> class Spam(QWidget, QDialog): pass
    ... 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: Error when calling the metaclass bases
        Cannot create a consistent method resolution
    order (MRO) for bases QWidget, QDialog
    >>> class Spam(QDialog, QWidget): pass
    ... 
    >>>
    Et puis il y a quelques singletons qui n'aiment pas être accouplé avec n'importe quoi...

    Cela fait partie des subtilités de l'héritage multiple qui font qu'on évite de l'utiliser lorsque ce n'est pas si indispensable.
    Ne l'avais je pas mentionné en PS?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    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 wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Il n'est pas "interdit", mais tous les objets ne s'y prêtent pas:
    Désolé, j'ai la mauvaise habitude de lire les notices. Extrait de celle de PyQt4:

    Multiple Inheritance¶

    It is not possible to define a new Python class that sub-classes from more than one Qt class.
    Tyrtamos

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Oui vous avez raison SIP ne permet pas cela.
    Mais vous pouvez utilisez la classe construire par le Designer via héritage multiple car cette dernière n'est pas un QObject.
    Je ne vois pas trop ce que vous ajoutez à mon post initial - just rambling?
    Et la doc est ici
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    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
    Citation Envoyé par wiztricks Voir le message
    Je ne vois pas trop ce que vous ajoutez à mon post initial
    Je me suis contenté de décrire ce que je fais.

    Tyrtamos

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Je me suis contenté de décrire ce que je fais.
    That's it.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  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
    salut
    j'ai crée deux fichier :
    1. un fichier feb.py qui contient la classe Ui_myClasse generé par QT Creator et qui derive d'un objet
    2. un fichier openFileHerite.py contenant ma classe contenat ma classe Fenetre
    masi j'ai un message d'erreur dans ce fichier
    voici le code de mes deux classe avec un fichier attaché du message d'erreur :
    code du fichier feb.py :
    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
    # -*- 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))
     
     
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_myClasse()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    code du fichier openFileHerite.py


    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
    # -*- coding: utf-8 -*-
    import sys 
    from PyQt4 import QtCore, QtGui
    from feb import Ui_myClasse
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
    class Fenetre(QtGui.QMainWindow)
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.ui = Ui_myClasse()
            self.ui.setupUi(self)
            self.ui.retranslateUi(self)
            #
            # suite: les objets venant de Qt Creator sont préfixés par self.ui
            #
     
            myClasse.setObjectName(_fromUtf8("myClasse"))
            myClasse.resize(400, 300)
     
            self.ui.centralWidget = QtGui.QWidget(myClasse)
            self.ui.centralWidget.setObjectName(_fromUtf8("centralWidget"))
     
            self.ui.pushButton = QtGui.QPushButton(self.centralWidget)
            self.ui.pushButton.setGeometry(QtCore.QRect(150, 70, 75, 23))
            self.ui.pushButton.setObjectName(_fromUtf8("pushButton"))
            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.chargerFichier)
     
            self.ui.menuBar = QtGui.QMenuBar(myClasse)
            self.ui.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 20))
            self.ui.menuBar.setObjectName(_fromUtf8("menuBar"))
            myClasse.setMenuBar(self.ui.menuBar)
     
            self.mainToolBar = QtGui.QToolBar(myClasse)
            self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
            myClasse.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
     
            self.ui.statusBar = QtGui.QStatusBar(myClasse)
            self.ui.statusBar.setObjectName(_fromUtf8("statusBar"))
            myClasse.setStatusBar(self.ui.statusBar)
     
            self.retranslateUi(myClasse)
            QtCore.QMetaObject.connectSlotsByName(myClasse)
     
          def chargerFichier(self):
            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_())


    objectif : c'est de pouvoir appeler la fonction chargerFichier quand je clique sur le bouton pour ouvrir un fichier à partir de l'ordinateur
    Images attachées Images attachées  

  10. #10
    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,

    Quand l'erreur dit quelque chose comme "j'attends ':'", c'est qu'il manque ':'!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Fenetre(QtGui.QMainWindow):
    A part cela, tu as plusieurs erreurs dues au fait que feb.py référence la fenetre de openFileHerite.py, alors que pendant l'importation, cette fenêtre est encore inconnue.

    En fait, tu fais trop de choses dans feb.py. Déplace la connexion entre les boutons et les méthodes de Fenetre dans openFileHerite.py.

    Si tu veux plus d'aide, donne le fichier feb.ui.

    Tu es bientôt au bout!

    Tyrtamos

  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
    c'est ca mon fichier myClass.ui
    donc j'ai generé myClasse.py
    et j'ai crée sous eclipse un fichier feb.py dedans j'ai inseré le code de myClasse.py

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>myClasse</class>
     <widget class="QMainWindow" name="myClasse">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>400</width>
        <height>300</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>myClasse</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="QPushButton" name="pushButton">
        <property name="geometry">
         <rect>
          <x>150</x>
          <y>80</y>
          <width>75</width>
          <height>23</height>
         </rect>
        </property>
        <property name="text">
         <string>PushButton</string>
        </property>
       </widget>
      </widget>
      <widget class="QMenuBar" name="menuBar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>400</width>
         <height>20</height>
        </rect>
       </property>
      </widget>
      <widget class="QToolBar" name="mainToolBar">
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>
    la classe Fenetre est deja dans le fichier openFileHertie.py

  12. #12
    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
    le probleme ce qu'il connait pas myClass
    j'ai corrigé l'erreur
    mais il me dit comme message :
    myClasse.setObjectName(_fromUtf8("myClasse"))
    NameError: global name 'myClasse' is not defined

  13. #13
    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
    Respecte le principe suivant:

    1- tous les objets graphiques, y compris les menus, sont définis dans QtDesigner

    2- toutes les connexions entre ces objets graphiques et les méthodes de la classe Fenetre sont définies dans la classe Fenetre.

    Je n'ai pas le temps d'en faire plus cet après-midi. Si tu es encore coincé(e) dans la soirée, je te ferai une proposition de code.

    Tyrtamos

  14. #14
    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
    j'ai fais comme tu m'as dit et ca fonctionne
    donc je postule ce code qui marche pour ceux qui ont le même problème que moi
    merci infiniment à toi , tes conseils m'ont beaucoup aidé
    le code de fichier feb.py :
    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
    # -*- 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)
     
            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))
    le code du fichier openFileHerite.py :
    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
    # -*- coding: utf-8 -*-
    import sys 
    from PyQt4 import QtCore, QtGui
    from feb import Ui_myClasse
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s
     
    class Fenetre(QtGui.QMainWindow):
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
            self.ui = Ui_myClasse()
            self.ui.setupUi(self)
            self.ui.retranslateUi(self)
            #
            # suite: les objets venant de QtDesigner sont préfixés par self.ui
            #
            QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.chargerFichier)
     
        def chargerFichier(self):
            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_())
    je suis contente

  15. #15
    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
    si tu peux me faire une proposition de code mais avec un menu à la place du bouton
    je explique plus :
    un menu fichier quand je clique j'ai sélectionner un fichier je clique dessus j'affiche la fenêtre pour choisir un fichier sur l'ordinateur .
    bon j'ai fais pareil tout à l'heure avec le bouton :
    1. une classe qui construit le menu (QT Designer)
    2. une autre classe qui contient cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.ui.actionOuvrir_un_fichier.triggered.connect(self.ouvrirFichier)
    y a pas de message d'erreur mais quand je clique sur le sous-menu sélectionner un fichier rien ne se passe
    pourtant ca marche nickel pour le bouton
    merci encore

  16. #16
    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
    Citation Envoyé par nancy maman Voir le message
    y a pas de message d'erreur mais quand je clique sur le sous-menu sélectionner un fichier rien ne se passe
    pourtant ca marche nickel pour le bouton
    La ligne connect semble correcte. Je l'ai essayé sur un de mes codes test, et ça marche.

    => redonne les fichiers à la dernière définition

    Tyrtamos

  17. #17
    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
    ca fonctionne , j'ai tout recommencer de zéro et ca marche
    pourtant j'ai fais pareil que hier , j'aurais du faire une petite erreur dans le code sans me rendre compte

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

Discussions similaires

  1. utilisation d'une variable d'une class dans une autre class
    Par the watcher dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2010, 14h01
  2. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  3. Détecter une action d'une classe dans une autre classe
    Par Pirokkk dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 12/05/2008, 12h14
  4. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  5. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04

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