从另一个类调用self.variable

时间:2017-09-27 08:43:23

标签: python python-3.x

如何从另一个类调用变量,我得到2个类,一个独立于另一个类,但如果在第一类中发生某些事情,我需要在gui类中使用标签(self.lbl)并更改它的值。

class MyCalendar(wx.Frame):

    def __init__(self, *args, **kargs):
        wx.Frame.__init__(self, *args, **kargs)
        self.cal = CalendarCtrl(self, 10, wx.DateTime.Now(),style= CAL_MONDAY_FIRST)
        self.cal.Bind(wx.adv.EVT_CALENDAR, self.OnDate)

    def OnDate(self,event):

        if dateStatus:
            global beginDate
            tmp = datetime.datetime.strptime(str(self.cal.GetDate()), '%a %b %d %X %Y').strftime('%Y-%m-%d')
            beginDate = datetime.datetime.strptime(tmp, '%Y-%m-%d').date()
            #DataList.renewlabels()    

        else: 
            global endDate
            tmp = datetime.datetime.strptime(str(self.cal.GetDate()), '%a %b %d %X %Y').strftime('%Y-%m-%d')
            endDate = datetime.datetime.strptime(tmp, '%Y-%m-%d').date()
            #DataList.renewlabels()    
        wx.Window.Close(self)

class DataList(wx.Frame,): 
    def __init__(self, parent, id, title): 
        wx.Frame.__init__(self, parent, id, title, size=(830, 440)) 
        self.Maximize(True)
        panel = wx.Panel(self, -1)

        uber_sizer = wx.BoxSizer(wx.VERTICAL)
        top_sizer = wx.BoxSizer(wx.HORIZONTAL)


        right_sizer = wx.BoxSizer(wx.VERTICAL)

        #Labels
        self.beginlbl = wx.StaticText(panel ,-1,style = wx.ALIGN_CENTER)
        font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
        self.beginlbl.SetLabel(str(beginDate))
        self.beginlbl.SetFont(font)
        self.endlbl = wx.StaticText(panel   ,-1,style = wx.ALIGN_CENTER)
        self.endlbl.SetLabel(str(endDate))
        self.endlbl.SetFont(font)
        callCalendar() 

def callCalendar():
    app = wx.App()
    frame = MyCalendar(None)
    frame.Show()
    app.MainLoop()            


app = wx.App() 
dl = DataList(None, -1, 'Radar Report') 
dl.Show() 
app.MainLoop()   

这是一些代码,可以让我了解我拥有的东西。

编辑: 我错过了 DataList 类中的一种方法,因为你可以看到我在 MyCakendar.Ondate

中调用它
def renewlabels(self)
   self.beginlbl.SetLabel(str(beginDate))

1 个答案:

答案 0 :(得分:2)

如果我理解你的需要,你就可以通过第一堂课了。 instance作为另一个类的参数'方法,您可以在其中进行更改。

这是一个例子。

class Class1():
    def __init__(self, a):
        self.a = a

class Class2():
    def change(self, instance):
        instance.a = 4

first = Class1(1)
print first.a

second = Class2()
second.change(first)

print first.a

因此,您可以在另一个类中读取或更改值。