从DateTimeCtrl WXPython中检索日期

时间:2018-09-24 16:48:28

标签: python-3.x datetime datepicker wxpython wxpython-phoenix

嘿,所有即时消息都很难解决,我认为这应该很简单。我使用WXpython(3.X)制作我的GUI,我使用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 :(得分:0)

您应该能够将DatePickerCtrl小部件绑定到wx.adv.EVT_DATE_CHANGED

然后在事件处理程序中,您将执行以下操作:

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

请查看wxPython演示,因为它具有该小部件以及其他大多数部件的良好示例。

答案 1 :(得分:0)

您已经声明了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()

由于我不是来自美国,因此我将日期重新设置为dd / mm / yyyy。
如果您想获得更多控制权,请使用wx.adv.CalendarCtrl