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:
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.
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)
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 !
Partager