Получить дату из DateTimeCtrl WXPython - PullRequest
0 голосов
/ 24 сентября 2018

Привет всем, у меня трудные времена с чем-то, что я считаю довольно простым.Я использую WXpython (3.X), чтобы сделать мой графический интерфейс, и я использую DatePickerCtrl, чтобы сформировать свой контроль.Все, что я пытаюсь сделать, это получить значение, когда я его изменю.Я использовал метод GetValue (), но он возвращает только дату, которая в настоящее время показывает не ту, на которую я ее изменил.Затем я попытался использовать DateEvent.GetDate, но я продолжаю получать сообщение об ошибке.

def getStartDate(self):
    a = wx.adv.DateEvent(self, self.date_Begin.GetValue(), Event.SetTimestamp()).GetDate
    print(a)
    return a

, и ошибка, которая появляется,

**Event.SetTimestamp(): first argument of unbound method must have type 'Event'**

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы объявили def getStartDate(self): вместо def getStartDate(self,event):, поэтому вы не разрешаете отправлять событие в функцию.
Эта функция генерирует только одно событие EVT_DATE_CHANGED.

import wx
import datetime
import wx.adv
#----------------------------------------------------------------------

class TestPanel(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None)

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(sizer)

        dpc1 = wx.adv.DatePickerCtrl( self, wx.ID_ANY, wx.DefaultDateTime)
        self.Bind(wx.adv.EVT_DATE_CHANGED, self.OnDateChanged, dpc1)
        sizer.Add(dpc1, 0, wx.ALL, 50)
        # In some cases the widget used above will be a native date
        # picker, so show the generic one too.
        dpc2 = wx.adv.GenericDatePickerCtrl(self, size=(120,-1),
                                       style = wx.TAB_TRAVERSAL
                                       | wx.adv.DP_DROPDOWN
                                       | wx.adv.DP_SHOWCENTURY
                                       | wx.adv.DP_ALLOWNONE )
        self.Bind(wx.adv.EVT_DATE_CHANGED, self.OnDateChanged, dpc2)
        sizer.Add(dpc2, 0, wx.LEFT, 50)
        now = wx.DateTime.Now()
        print (wx.DateTime.FormatISODate(now))
        print (wx.DateTime.Format(now))
        dpc2.SetValue(wx.DateTime.Now())

    def OnDateChanged(self, evt):
        sel_date = evt.GetDate()
        print (sel_date.Format("%d-%m-%Y"))

#----------------------------------------------------------------------

if __name__ == '__main__':
    app = wx.App()
    frame = TestPanel()
    frame.Show()
    app.MainLoop()

Выше я переформатирую дату в дд / мм / гггг, так как я не из США.
Если вы хотите больше контроля, используйте wx.adv.CalendarCtrl

0 голосов
/ 25 сентября 2018

Вы должны иметь возможность привязать ваш DatePickerCtrl виджет к wx.adv.EVT_DATE_CHANGED

Затем в вашем обработчике событий вы сделаете что-то вроде этого:

def OnDateChanged(self, evt):  
    new_date = evt.GetDate()
    print(new_date)
    return new_date

Проверьте wxPythonдемо, так как в нем есть хороший пример этого виджета, как и большинства других.

...