将返回的函数值存储在列表WXpython

时间:2018-09-25 20:55:50

标签: python datetime datepicker wxpython wxpython-phoenix

问题:当我将DatePicker obj与一个函数绑定时,该函数在该函数中可以正常工作,但是当我尝试将相同的值附加到另一个函数的列表中时,它将执行1或2件事,则错误提示

[<bound method F_Main.date_Begin of <guiwm.F_Main object at 0x08D01490>>, (15, 48, 55)]

我知道的意思是完全调用该函数,所以我应该在函数调用的末尾添加一个括号“()”,但是当我添加它时,会出现以下错误

date_Begin() missing 1 required positional argument: 'event'

下面是我的一些代码以及事件绑定

self.dateBegin.Bind( wx.adv.EVT_DATE_CHANGED, self.date_Begin )
def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    event.Skip()
def time_Begin(self):
    aStringTime = self.timeBegin.GetTime()
    print(aStringTime)
    return aStringTime

这是我在调用另一个函数

def clickBtn_Generate( self, event ):
    a = self.date_Begin()
    b = self.time_Begin()
    list = []
    list.append(a)
    list.append(b)
    print(list)
    return list
    event.Skip()

我尝试删除并保留括号

a = self.date_Begin

但是它们都不起作用。您知道如何解决此问题吗?

class F_Main ( wx.Frame ):

def __init__( self, parent ):
    wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Generator", pos = wx.DefaultPosition, size = wx.Size( 800,800 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

    self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
    self.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
    self.SetBackgroundColour( wx.Colour( 255, 255, 0 ) )

    bSizer5 = wx.BoxSizer( wx.HORIZONTAL )

    self.lbl_WS1 = wx.StaticText( self, wx.ID_ANY, u"Wafer Sort 1", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.lbl_WS1.Wrap( -1 )
    self.lbl_WS1.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_ACTIVECAPTION ) )

    bSizer5.Add( self.lbl_WS1, 0, wx.ALL, 10 )

    self.dateBegin = wx.adv.DatePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DROPDOWN )
    bSizer5.Add( self.dateBegin, 0, wx.ALL, 5 )

    self.timeBegin = wx.adv.TimePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DEFAULT )
    bSizer5.Add( self.timeBegin, 0, wx.ALL, 5 )

    self.dateEnd = wx.adv.DatePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DROPDOWN )
    bSizer5.Add( self.dateEnd, 0, wx.ALL, 5 )

    self.timeEnd = wx.adv.TimePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime, wx.DefaultPosition, wx.DefaultSize, wx.adv.DP_DEFAULT )
    bSizer5.Add( self.timeEnd, 0, wx.ALL, 5 )

    self.btnGenerate = wx.Button( self, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
    bSizer5.Add( self.btnGenerate, 0, wx.ALL, 5 )

    self.SetSizer( bSizer5 )
    self.Layout()

    self.Centre( wx.BOTH )

    # Connect Events
    self.dateBegin.Bind( wx.adv.EVT_DATE_CHANGED, self.date_Begin )
    #self.timeBegin.Bind(wx.adv.EVT_TIME_CHANGED, self.time_Begin)
    self.dateEnd.Bind( wx.adv.EVT_DATE_CHANGED, self.date_End )
    self.timeEnd.Bind(wx.adv.EVT_TIME_CHANGED, self.time_End)
    self.btnGenerate.Bind( wx.EVT_BUTTON, self.clickBtn_Generate )

def __del__( self ):
    pass


# Virtual event handlers, overide them in your derived class
def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    event.Skip()
def time_Begin(self):
    aStringTime = self.timeBegin.GetTime()
    print(aStringTime)
    return aStringTime

def date_End( self, event ):
    aStringDate = event.GetDate()
    event.Skip()

def time_End(self, event):
    aStringTime = event.GetDate()
    print(aStringTime)

def clickBtn_Generate( self, event ):
    a = self.date_Begin()
    b = self.time_Begin()
    list = []
    list.append(a)
    list.append(b)
    print(list)
    return list
    event.Skip()

1 个答案:

答案 0 :(得分:0)

您错过了活动。
解决此问题的方法是发送None,即

a = self.date_Begin(None)

由于该函数的编码方式,在致电Skip()

之前,您还需要检查事件。
def date_Begin( self, event ):
    aStringDate = self.dateBegin.GetValue().Format("%m-%d-%y")
    print(aStringDate)
    return aStringDate
    if event:
        event.Skip()

针对您对Skip的评论

  

Skip(self,skip = True)此方法可以在事件处理程序内使用   控制是否将绑定到此事件的其他事件处理程序   在当前一个返回后调用。

     

如果不跳过(或等效地,如果使用Skip(false)),则事件将   不再处理。如果调用Skip(true),则事件   处理系统继续搜索其他处理程序功能   对于此事件,即使它已经在   当前的处理程序。

     

通常,建议跳过所有非命令事件以允许   进行默认处理。但是,命令事件是   通常不像按钮之类的单个命令那样被跳过   单击或菜单项选择只能由一个处理程序处理。

     

参数:跳过(布尔)