Bonjour à tous,
J'ai conçu une application en utilisant PyQt5 et Qtdesigner. Je suis en train de la reconfigurer proprement en me basant sur le modèle MVC (Model View Controller). J'ai donc 3 fichier principaux:
- view.py
- controller.py
- model.py
Voici le code présent dans le controller.py:
f_v est le fichier view.py et f_m le fichier model.py. Ils contiennent respectivement une class flex_view (GUI) et flex_core (stockage données, traitement etc.).
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 class flex_ctrl(): def __init__(self, model, view): self._model = model self._view = view self._connect_signals() def _load_file(self): print('i am loading') file_name = self._view.list_file.selectedIndexes()[0].data() + '.txt' print(file_name) self._model.set_data(file_name) def _new_file(self): print('new file') def _connect_signals(self): self._view.list_file.clicked.connect(self._view.able_button) self._view.load_button.clicked.connect(self._load_file) self._view.list_file.activated.connect(self._load_file) self._view.create_button.clicked.connect(self._new_file) def main(): app = QApplication(sys.argv) view = f_v.flex_view() view.show() model = f_m.flex_core() flex_ctrl(model = model, view = view) app.exec() if __name__ == '__main__': main()
Mon problème est que : lorsque j'appuie sur les boutons de la GUI, rien ne se passe.
Cette ligne fonctionne très bien. Lorsque je clique sur un élement de la liste, le bouton change bien de couleur et il devient utilisable (but de la fonction able_button)self._view.list_file.clicked.connect(self._view.able_button)
En revanche, les lignes suivantes ne semblent pas fonctionner:
Lorsque que je double clique sur un élément de la liste ou bien que j'appuie sur le bouton concerné, aucune action ne se passe. Le texte "I am loading" ne s'affiche même pas, tout comme le texte "new file".self._view.load_button.clicked.connect(self._load_file)
self._view.list_file.activated.connect(self._load_file)
En revanche, si je passe la fonction "_new_file" dans la classe flex_view et que je connecte donc le bouton à la méthode de la classe flex_view, tout va bien, le texte s'imprime.
On dirait qu'il ne veut pas connecter les boutons de ma GUI aux fonctions de ma classe controller.
Je me suis basé sur ce tutoriel là.
Merci d'avoir pris le temps de me lire et surtout de m'aider
Partager