【问题标题】:Retrive date from DateTimeCtrl WXPython从 DateTime Ctrl WXPython 中检索日期
【发布时间】:2018-09-24 16:48:28
【问题描述】:

大家好,我在一些我认为应该很简单的事情上遇到了困难。我使用 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'**

【问题讨论】:

    标签: python-3.x datetime datepicker wxpython


    【解决方案1】:

    您已声明 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

    【讨论】:

    • 我试过了,但是当我运行它时,它说 getStartDay 缺少一个 1 必需的位置参数:'evt'
    • 好的,我开始工作了。似乎如果您调用该函数并添加像 getstartday() 这样的括号,它将需要一个参数,但是当我仅通过名称 getstartday 调用它时,它工作正常,非常感谢!
    【解决方案2】:

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

    然后在你的事件处理程序中,你会做这样的事情:

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

    查看 wxPython 演示,因为它提供了这个小部件以及大多数其他小部件的一个很好的示例。

    【讨论】:

    • 我试过了,但是当我运行它时,它说 getStartDay 缺少一个 1 必需的位置参数:'evt'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2017-01-31
    • 2010-12-17
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多