Bonjour,
je débute en PyQt et je bloque pour appeler une méthode d'une classe depuis une autre classe.
Par exemple, mettons que j'ai créé avec QtDesigner une calculatrice très simple, générant au final un fichier calculatrice.py avec une classe Ui_Calculatrice.
J'ai également un fichier main.py qui lance cette application et contient notamment ce code:
Comme on le voit ici j'ai voulu utiliser une méthode "calculer_operation" de la classe Calcul, qui est définie dans un autre fichier "calcul.py".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class calculatrice(QGroupBox): def __init__(self, parent=None): #Initialisation QGroupBox.__init__(self) self.ui = Ui_Calculatrice() self.ui.setupUi(parent) #Creation d'un objet "calcul" monCalcul = calcul.Calcul() #Connexions signaux et slots self.connect(self.ui.pushButtonEgal,SIGNAL("clicked()"),monCalcul.calculer_operation())
je crée donc une instance de Calcul() puis je veux appeler "calculer_operation" lorsque je clique sur un bouton "=".
Ma classe Calcul est la suivante:
Bien sûr cela ne fonctionne pas (j'ai l'erreur "Calcul instance has no attribute 'ui'").
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 class Calcul: def __init__(self, parent=None): self.n1 = 0 self.n2 = 0 self.op = '+' #Fonction de calcul def calculer_operation(self): self.n1 = self.ui.spinBoxNombre1.value() self.n2 = self.ui.spinBoxNombre2.value() self.op = self.ui.comboBoxOperation.currentText() if self.op=='+': self.ui.labelResultat.setText(str(n1+n2)) elif self.op=='-': self.ui.labelResultat.setText(str(n1-n2)) elif self.op=='/': self.ui.labelResultat.setText(str(n1/n2)) else: self.ui.labelResultat.setText(str(n1*n2))
Car ici, par exemple avec la ligne
le "self" de "self.n1" représente la classe Calcul et le "self" de "self.ui.spinBoxNombre1.value()" la classe "calculatrice"... (enfin je crois?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.n1 = self.ui.spinBoxNombre1.value()
Comment différencier les deux?
Je sais qu'il est inutile de créer cette classe "Calcul" et que je pourrai directement définir la méthode "calculer_operation" dans la classe calculatrice, mais c'est pour le principe: je voudrais pouvoir faire ce genre d'appel dans le vrai projet que je dois développer.
Est-ce possible (ou est-ce que j'ai écrit n'importe quoi ^^') et sinon comment doit-on procéder?
Merci d'avance pour votre aide.
Partager