Bonjour à tous,

Je pensais avoir compris comment échanger des variables entre 2 classes mais j'ai l'impression que non, surtout lorsque j'utilise des fenêtres Qt. Voici ce que je souhaiterai faire.

J'ai une fenêtre principale (F1) avec, pour simplifier, deux boutons. L'un me permettant d'aller chercher le nom d'un fichier (actionLoadExperiment dans mon code qui va suivre) et l'autre qui va ouvrir une seconde fenêtre (F2). Je voudrais donc récupérer une variable str que je définis dans la class associé à F1 et la transmettre à la class associé à F2 pour après m'en servir dans des fonctions (j'espère être clair). Voici le code que j'utilise et qui ne fonctionne pas comme je voudrais:

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
 
#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
import sys
 
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog, QDialog
from PyQt5 import uic, QtCore
 
class MainWindowOPO(QMainWindow):
 
    def __init__(self, parent = None):
 
        ### Portion du code qui permet de convertir l'interface .ui de QtDesigner en .py  
        super(MainWindowOPO, self).__init__() # Call the inherited classes __init__ method
        uic.loadUi('MainWindowOPO.ui', self) # Load the .ui file
 
        ################################################################################ 
        ### Action lie a la barre des menus
        self.actionLoad.triggered.connect(self.actionLoadExperiment)
 
        self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal)
 
 
    def onPushButtonPivotal(self):   ### Procedure pour pivoter une courbe entre deux points (regression lineaire pour avoir les deux points a zero)
        self.pivotalWindow = PopUpPivotal()
        self.pivotalWindow.setWindowModality(QtCore.Qt.ApplicationModal)
        self.pivotalWindow.show()                      
 
 
    def actionLoadExperiment(self):
        dialog = QFileDialog()
        experiment_filename = dialog.getOpenFileName()
        self.loaded_filename = experiment_filename[0]
        return self.loaded_filename
 
 
###################################################################################################
class PopUpPivotal(QDialog):
 
    def __init__(self, parent = None):
            super(PopUpPivotal, self).__init__() # Call the inherited classes __init__ method
            uic.loadUi('PopUpPivotal.ui', self) # Load the .ui file      
 
            self.pushButtonPivotal.clicked.connect(self.onPushButtonPivotal) 
 
 
    def onPushButtonPivotal(self):
        t = MainWindowOPO().actionLoadExperiment()
        print(t)
        self.close()
 
 
    #############################################################################################        
 
### Code minimal pour afficher l'interface graphique        
if __name__.endswith('__main__'):
 
    if not QApplication.instance():
        MainApp = QApplication(sys.argv)
    else :
        MainApp = QApplication.instance()
 
mainWindow = MainWindowOPO()
mainWindow.show()
 
rc = MainApp.exec_()
sys.exit(rc)
J'arrive à récupérer le nom qui m'intéresse mais le problème et que lorsque je fais ça, jé réexecute la fonction actionLoadExperiment entièrement alors que je ne voudrais récupérer que la variable self.loaded_filename.

Est-ce possible de faire ça ou bien je suis dans l'obligation de réexécuter la fonction complètement ?

Merci d'avance pour votre aide !