сохранить возвращенное значение функции в списке WXpython - PullRequest
0 голосов
/ 25 сентября 2018

проблема: когда я связываю свой объект DatePicker с функцией, он прекрасно работает внутри этой функции, но когда я пытаюсь добавить то же значение в список в другой функции, он делает 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 голосов
/ 26 сентября 2018

Вы пропускаете событие.
Способ обойти это - отправить 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

Пропустить (self, skip = True) Этот метод можно использовать внутри обработчика событий, чтобы контролировать, будут ли вызываться другие обработчики событий, связанные с этим событием, после возврата текущего.

Без пропуска (или эквивалентно, если используется Пропуск (false)),событие больше не будет обрабатываться.Если вызывается Skip (true), система обработки событий продолжает поиск дополнительной функции-обработчика для этого события, даже если она уже была обработана в текущем обработчике.

В общем, рекомендуется пропустить всенекомандные события, позволяющие выполнять обработку по умолчанию.События команды, однако, обычно не пропускаются, так как обычно одна команда, такая как нажатие кнопки или выбор пункта меню, должна обрабатываться только одним обработчиком.

Параметры: skip (bool)

...