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

Python Discussion :

Passez des variables entre plusieurs classes sous PyQt5


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut Passez des variables entre plusieurs classes sous PyQt5
    Bonjour à tous,

    J'ai un petit problème avec le passage de variables entre classes et je n'arrive pas à trouver de solutions !

    J'ai 3 classes différentes (qu'on pourrait appeler start, main et save).
    La classe start me permet de récupérer un chemin d'accès (C:/Users/...). Une fois le chemin récupéré la fenètre start se ferme et lance la fenètre main.
    La classe main sert à faire une mesure stocké sous forme de liste et une fois la mesure faites ouvre une fenètre modale lié à la classe save.

    Ce que j'aimerais faire c'est récupérer dans ma classe save le chemin du fichier et la liste pour les sauvegarder. Mais je n'ai aucune idée de comment faire ça !
    J'ai essayé les signaux pyqtSignal, les variables globales, les self. ... mais rien ne fonctionne.

    Quelqu'un pourrait m'orienter sur une piste pour faire ce que je souhaite ?

    Merci d'avance !

    Code start : 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
     
    import os
     
    from PyQt5.QtWidgets import QWidget, QApplication, QFileDialog
    from PyQt5 import uic
     
    import Main
     
    class start(QWidget):
     
        def __init__(self, parent = None):
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
            self.pushButtonStart.clicked.connect(self.onPushButtonStart)   
     
        def onPushButtonStart(self):
     
            folder_name = self.lineEditUsername.text()
     
            dialog = QFileDialog()
            folder_path = dialog.getExistingDirectory(None, "Select Folder")
            folder_path_total = folder_path + os.path.sep + folder_name
     
     
            if os.path.isdir(folder_path_total) == True:
                self.startMainWindow = Main.main()
                self.close()
                self.startMainWindow.show()
     
            else:
                os.mkdir(folder_path_total)
                self.startMainWindow = Main.main()
                self.close()
                self.startMainWindow.show()

    Code main : 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
     
     
    ### Import des classes pour les fenetres pop-up ###############################
     
    import Save
     
    ###############################################################################
     
    ### Import des modules pour la gestion de Qt ##################################
     
    from PyQt5 import uic, QtCore
    from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
     
    ###############################################################################
     
     
    ### Partie interface graphique et controle ####################################
     
    class MainWindowFluorescenceApplication(QMainWindow):
     
        def __init__(self,parent = None):
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
            ### Connexion signaux-slot ######################
     
            self.pushButtonAcquisitionSpectre.clicked.connect(self.onPushButtonAcquisitionSpectreClicked)
     
            #################################################
     
        ### Méthode des signaux-slot ##################################
     
        def onPushButtonAcquisitionSpectreClicked(self, filename):
     
                ### Acquisition des données avec le spectro ###############
     
                Wavelengths = spec.wavelengths()
                Intensities = spec.intensities()
     
                Data =[Wavelengths, Intensities]
                Data = list(Data)
     
                #### Sauvegarde des données ################################
     
                self.saveData = Save.save()
                self.saveData.setWindowModality(QtCore.Qt.ApplicationModal)
                self.saveData.show()

    Code save : 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
     
    import os
    import json
     
    from PyQt5.QtWidgets import QWidget, QFileDialog
    from PyQt5 import uic
     
    import Start
    import Main
     
    class save(QWidget):
     
        def __init__(self, parent = None):
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
            self.pushButtonSave.clicked.connect(self.onPushButtonSaveClicked)
            self.pushButtonCancel.clicked.connect(self.onPushButtonCancelClicked)     
     
        def onPushButtonSaveClicked(self):
     
            a = self.fenetre_demarrage.StartingSoftware.folder_path_sgn.connect()
            print(a)
     
    #        save_name = folder_path_total + os.path.sep + self.lineEditFilename.text()
    #        print(save_name)
    #        file = open(save_name+'.json', 'w+')
    #        json.dump(Data, file)
    #        print(save_name)
    #        print(Data)
     
    #        self.save_filename.emit(self.lineEditFilename.text())
            self.close()
     
        def onPushButtonCancelClicked(self):
            self.close()

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Ce que j'aimerais faire c'est récupérer dans ma classe save le chemin du fichier et la liste pour les sauvegarder
    Vous êtes conscient que vous devez importer start dans save pour que cela puisse se faire ?

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

    Citation Envoyé par Traxxael Voir le message
    Ce que j'aimerais faire c'est récupérer dans ma classe save le chemin du fichier et la liste pour les sauvegarder. Mais je n'ai aucune idée de comment faire ça !
    Une façon simple sera de passer ces informations de start à main en les passant en paramètres puis de main à save de la même façon.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Vous êtes conscient que vous devez importer start dans save pour que cela puisse se faire ?
    J'en suis bien conscient, j'ai corrigé l'erreur dans mon code initial. Dans mon programme je n'utilise pas start, main et save mais d'autres noms. J'ai choisi ceux là pour simplifier la présentation.


    Citation Envoyé par wiztricks Voir le message
    Salut,



    Une façon simple sera de passer ces informations de start à main en les passant en paramètres puis de main à save de la même façon.

    - W

    Merci pour la piste mais comment les passer en paramètres ?

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

    Citation Envoyé par Traxxael Voir le message
    Merci pour la piste mais comment les passer en paramètres ?
    "passer en paramètre" est un chose que vous avez normalement vu avec les fonctions non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    "passer en paramètre" est un chose que vous avez normalement vu avec les fonctions non?

    - W
    Oui mais je pense que je n'ai pas saisi toutes les subtilités . J'ai essayé quelque chose comme ça (seulement le start et save pour simplifier) :

    Code start : 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
     
    import os
     
    from PyQt5.QtWidgets import QWidget, QApplication, QFileDialog
    from PyQt5 import uic
     
    import Main
     
    class start(QWidget):
     
        def __init__(self, parent = None):
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
            self.pushButtonStart.clicked.connect(self.onPushButtonStart)   
     
        def onPushButtonStart(self):
            global folder_path_name
     
            folder_name = self.lineEditUsername.text()
     
            dialog = QFileDialog()
            folder_path = dialog.getExistingDirectory(None, "Select Folder")
            folder_path_total = folder_path + os.path.sep + folder_name
     
     
            if os.path.isdir(folder_path_total) == True:
                self.startMainWindow = Main.main()
                self.close()
                self.startMainWindow.show()
     
            else:
                os.mkdir(folder_path_total)
                self.startMainWindow = Main.main()
                self.close()
                self.startMainWindow.show()
     
        def passFolderName():
            global folder_path_name
     
            b = folder_path_name
            return b

    Code save : 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
     
    import os
    import json
     
    from PyQt5.QtWidgets import QWidget, QFileDialog
    from PyQt5 import uic
     
    import fenetre_demarrage
    import Fluorescence_application
     
    class PopUpSaveData(QWidget):
     
        def __init__(self, parent = None):
            super().__init__()
            uic.loadUi(__file__.split('.py')[0] + '.ui', self)
     
            self.pushButtonSave.clicked.connect(self.onPushButtonSaveClicked)
            self.pushButtonCancel.clicked.connect(self.onPushButtonCancelClicked)     
     
        def onPushButtonSaveClicked(self):
     
            a = Start.start.passFolderName()
            print(a)

    Mais ça ne fonctionne pas et je ne vois pas d'où vient mon erreur...

  7. #7
    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 Traxxael Voir le message
    Mais ça ne fonctionne pas et je ne vois pas d'où vient mon erreur...
    Ben, vous créez 2 classes A et B puis vous essayez de voir comment des instances de ces classes pourraient échanger des informations entre elles avec une hiérarchie semblable à celle de votre code: A saisit un nom de fichier et crée un B en le lui passant.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Modifier variable entre plusieurs classes
    Par asallou dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 26/03/2013, 09h28
  2. Réponses: 9
    Dernier message: 27/02/2011, 14h49
  3. Partager une variable entre plusieurs classes
    Par jasonpolakow dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/01/2011, 10h02
  4. Comment passer des variables entre classe ?
    Par flingue dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/04/2009, 08h28
  5. Partager des variables entre plusieurs actions ds un controlleur
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 11/10/2007, 09h38

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