appeler une méthode d'une autre classe
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:
Code:
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()) |
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".
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:
Code:
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)) |
Bien sûr cela ne fonctionne pas (j'ai l'erreur "Calcul instance has no attribute 'ui'").
Car ici, par exemple avec la ligne
Code:
self.n1 = self.ui.spinBoxNombre1.value()
le "self" de "self.n1" représente la classe Calcul et le "self" de "self.ui.spinBoxNombre1.value()" la classe "calculatrice"... (enfin je crois?)
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.