嘿,所有即时消息都很难解决,我认为这应该很简单。我使用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'**
答案 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