2015-02-06 2 views
0

У меня возникают трудности с попыткой получить функцию в отдельном классе. У меня есть основной класс с несколькими функциями, одна из которых является сброс:wxPython не может вызвать функцию в основном классе из подкласса

class GUI(wx.Frame): 
    [GUI STUFF HERE] 

    def reset(self): 
     self.data = [0] 

В этом классе я также иметь в своем распоряжении подпрограммы инициировать другой класс:

 self.controlPanel = controlPanel(self.panel) 

который инициирует другой класс, который является статический ящик с кнопками. В этом классе у меня есть функция, связанная с событием кнопки:

def reset(self, event): 
     GUI.reset() 

где функция «сброс» в главном классе GUI. Я получаю сообщение об ошибке, когда пытаюсь вызвать сброс в основном классе, но я могу сделать это наоборот. Почему это и как я могу это исправить? Я хочу, чтобы события кнопки в дочерних классах вызывали функцию в родительском классе.

Заранее спасибо.

+0

'reset' является методом экземпляра, поэтому называть его, вы должны поставить переменную экземпляра, а не только имя класса. 'GUI.reset()' не будет работать, но 'myGuiInstance.reset()' будет. – Kevin

+0

Это сработало, спасибо вам большое! я совершенно забыл экземпляр, называемый класс GUI ... – Cooper

ответ

2

«GUI» не определен в «controlPanel», вы хотите вызвать метод экземпляра «GUI».

Одним из способов было бы сделать следующее в вашей кнопки обработчик:

self.GetParent().reset() 

В зависимости, насколько сложна ваша заявка, это может выйти из-под, как он больше не будет работать, если вставить еще один слой между GUI и панель управления.

Возможно, вы захотите изучить «wx.lib.pubsub», а в вашем controlPanel используйте «pub.sendMessage», а в вашем графическом интерфейсе используйте «pub.subscribe».

wxPython Phoenix pubsub doc

pubsub's doc

+0

Спасибо за ваш входной andsuggestion, я попробовал и сказал: 'AtrributeError: объект«Panel»не имеет атрибута«reset'' I Представьте, что это проблема на моем конце, и я где-то испортил (скорее всего!) ... но Кевин решил мою проблему. – Cooper

+0

@Cooper, hhm, вероятно, моя ошибка как self.GetParent() получает родителя вашего обработчика кнопок, а графический интерфейс - это как минимум еще один уровень вверх. – Werner

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