2015-02-06 40 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 2015-02-06 14:19:48

+0

这已经很好吃了,非常感谢! 我已经完全忘了叫GUI类实例...... – Cooper 2015-02-06 17:14:03

回答

2

“GUI”未在“controlPanel”中定义,您想要调用“GUI”实例的方法。

一种方法是做你的按钮处理程序如下:

self.GetParent().reset() 

根据您的应用程序有多复杂,这可能失控,因为它会如果你在GUI之间插入另一层不再起作用控制面板。

您可能想要使用'wx.lib.pubsub'并在您的controlPanel中使用'pub.sendMessage'并在您的GUI中使用'pub.subscribe'。

wxPython Phoenix pubsub doc

pubsub's doc

+0

谢谢您的输入andsuggestion,我尝试过了,它说: 'AtrributeError:“小组”对象有没有属性“reset'' 我想象一下它的一个问题,我弄糟了(最有可能!)......但是凯文解决了我的问题。 – Cooper 2015-02-06 17:15:11

+0

@Cooper,嗯,可能是我的错误,因为self.GetParent()正在获取按钮处理程序的父级,并且GUI至少还有一个级别。 – Werner 2015-02-07 09:51:33