2016-06-07 4 views
-1

Ich verwende PyQt, um eine Anwendung mit matplotlib zu erstellen, und ich versuche, eine Methode von einer Klasse mit einer anderen Methode aus einer anderen Klasse zu verbinden.Verbinden von drei Klassen von Methoden innerhalb von ihnen in Python

Klasse A ist eine QMainWindow, die class B instanziieren, die eine matplotlib Abbildung ist. Also, wenn ich Methode a von class A (verbunden mit einem QPushButton) anrufe, ruft es class C an, etwas zu tun, und dann muss es an method b in class B anschließen, um etwas anderes zu tun.

las ich eine Menge Codierung und ich fand das zum Beispiel:

python super calling child methods

, die ich tun wollte, aber es hat nicht funktioniert.

Dies ist der Code, den ich habe:

class A(QMainWindow): 
    def __init__(self): 
    super(QMainWindow, self).__init__() 
    #A lot of stuff in here 

    #I instantiate class B 
    self.call_B = B() 

    def a(self): 
    print "Hello" 
    self.open_C = C(self) 

class B(QMainWindow): 
    def __init__(self): 
    QMainWindow.__init__(self) 
    #A lot of stuff in here 

    def b(self): 
    print "How are you?" 

class C(B): 
    def __init__(self): 
    super(C, self).__init__() 
    #A lot of stuff in here 

    self.connect_to_b()  

    def connect_to_b(self): 
    #From here is where I need to call method b() from class B 

Wie Sie oben sehen können, ich brauche Methode connect_to_b von class C zu Verfahren b in class B zu verbinden.

Wie kann ich das erreichen ?. Hoffe, du kannst mir helfen.

+0

Wenn 'C' vom Typ' B' ist, hat es Zugriff auf 'b'. rufen Sie einfach 'b' mit' b() ' –

+0

Vielen Dank für Ihren Kommentar. Ich habe das versucht, aber es hat nicht funktioniert. Vielleicht vermisse ich etwas. Ich bekomme diesen Fehler dabei: 'Globaler Name 'b' ist nicht definiert ' –

+0

benutze' self.b() 'weil' b' in deiner Klasse ist –

Antwort

1

C erbt von B so hat connect_to_b Zugriff auf b.

def connect_to_b(self): 

    self.b() 
+0

Vielen Dank für Ihre Antwort. Ich denke, dass das Problem mit 'self.b()' ist, dass 'B' wieder instanziiert wird, und es" nicht den Job macht "in dem' B' ich instanziiert in 'A'. Liege ich falsch? –

+0

Gibt es einen anderen Weg, dies zu tun? 'Klasse C' kann modifiziert werden, aber man muss diese Methode in' B' –

+0

'B' nicht erneut instanziieren. 'C' ist vom Typ' B', Sie haben also Zugriff auf 'b'. du instanziierst es nicht. –

Verwandte Themen