从另一个函数中访问Class函数中的变量?

时间:2016-01-07 05:17:48

标签: python python-2.7 wxpython

由于MyApp初始化的框架范围,我无法运行代码。这是一个演示我的问题的精简示例应用

import wx

class MyApp(wx.App):
    def OnInit(self):
        self.InitWindow()
        return True

    def InitWindow(self):
        frame = wx.Frame(None, wx.ID_ANY, "Travis's sample problem app")
        nameField = wx.TextCtrl(frame)

        clickbtn = wx.Button(frame, 0, label="click me")
        frame.Bind(wx.EVT_BUTTON, self.clickedAction, clickbtn)
        frame.Show()

    def clickedAction(self, e):
        #Here we will get an error: "object has no attribute 'nameField'"
        print self.nameField.GetString()
        #what am I doing wrong?

app = MyApp()
app.MainLoop()

为什么nameField超出了试图使用它的函数的范围?

1 个答案:

答案 0 :(得分:0)

您的实例变量声明被声明为您的函数无法访问的局部变量。您可以在init中使用self.声明它们,以使其范围包括整个实例。

更改为:

import wx

class MyApp(wx.App):
   def __init__(self):  #<-- runs when we create MyApp
        #stuff here
        self.nameField = wx.TextCtrl(frame)  #<--scope is for all of MyApp
        #stuff

    def clickedAction(self, e):
        #stuff
app = MyApp()
app.MainLoop()

您可以阅读有关类变量和实例变量here之间差异的更多信息。