2012-10-26 4 views
1

je le schéma suivant d'un programme Python (en utilisant PyQt4):Comment appeler une fonction d'une autre classe en Python

class Polygon(QtGui.QGraphicsItem): 

    def __init__(self): 
     super(Polygon, self).__init__() 

    def addpoint(self, point): 
     if last_point: 
      # trying to add auto-save here 

class MainWidget(QtGui.QWidget): 

    openFileName = "" 
    list_of_polygons = [] 

    def __init__(self): 
     super(MainWidget, self).__init__() 

    def openFile(self): 
     call dialog 
     self.openFileName = ... 

    def saveFile(self): 
     # needs to access a couple something with self.variables, like self.openFileName 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = MainWidget() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

La fonctionnalité est une visionneuse d'image où je crée des polygones pour objet marquer. Je voudrais appeler une sauvegarde automatique une fois qu'un polygone a été créé. Donc, pour sauvegarder un polygone, je dois l'appeler à partir de la classe saveFile de la fonction MainWidget. Mon problème est que la fonctionnalité d'enregistrement est implémentée dans la classe MainWidget, et je ne sais pas comment y accéder à partir de la classe Polygon.

Quelle serait la meilleure idée pour le faire? Devrais-je créer saveFile global? Si oui, comment puis-je accéder à moi-même? variables du MainWidget?

+0

Sérieusement, vous pensez devoir faire une application 'saveFile()' après chaque 'addpoint()'? Cela semble lent, surtout si les points sont créés de manière interactive par un utilisateur ... – martineau

+0

Chaque polygone a environ 4-10 points. Je ne sauvegarde que lorsque le polygone est terminé. Juste ne pas inclus dans le code. – zsero

Répondre

2

Vous avez probablement besoin de passer l'objet widget à la Polygon lors de sa création pour qu'il sache ce que son « parent » objet widget est:

class Polygon(QtGui.QGraphicsItem): 

    def __init__(self, parent): 
     self.parent = parent 
     # ... 

(puis foo = Polygon(your_widget) lors de sa création). Vous pouvez ensuite appeler self.parent.saveFile(...) ou autre.

Questions connexes