2016-06-07 1 views
-1

Я использую PyQt для создания приложения с matplotlib, и я пытаюсь подключить метод из одного класса другим методом из другого класса.Подключение трех классов из методов внутри них в python

Класс A - это QMainWindow, который представляет собой экземпляр class B, который представляет собой фигурку matplotlib. Поэтому, когда я вызываю метод a от class A (подключен к QPushButton), он вызывает class C, чтобы что-то сделать, а затем он должен подключиться к method b в class B, чтобы сделать что-то еще.

Я прочитал много кодирования, и я нашел, что это, например:

python super calling child methods

, который я пытался сделать, но это не сработало.

Это код, у меня есть:

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 

Как вы можете видеть выше, мне нужно подключить метод connect_to_b от class C методу b в class B.

Как это сделать? Надеюсь, ты поможешь мне.

+0

если 'C' имеет тип' B', у него есть доступ к 'b'. просто позвоните 'b' с' b() ' –

+0

Спасибо за ваш комментарий. Я пробовал это, но это не сработало. Может быть, я чего-то не хватает. Я получаю эту ошибку при этом: 'global name 'b' не определен' –

+0

use' self.b() 'потому что' b' находится в вашем классе –

ответ

1

C имеет право от B, так connect_to_b имеет доступ к b.

def connect_to_b(self): 

    self.b() 
+0

Благодарим вас за ответ. Я думаю, что проблема с выполнением 'self.b()' заключается в том, что 'B' создается снова, и он не выполняет задание в' B' I, созданное в 'A'. Я ошибаюсь? –

+0

Есть ли другой способ сделать это? 'class C' может быть изменен, но он вызывает этот метод в' B' –

+0

'B' не создается снова. 'C' имеет тип' B', поэтому у вас есть доступ к 'b'. вы не создаете его. –

Смежные вопросы