1

我有一个 wxpython GUI 设置,用户可以在其中看到两个日历。然后他们从第一个日历中选择时间表的“开始日期”,然后从第二个日历中选择“结束日期”。但是,我希望他们能够从同一个日历中选择两者——这可能吗?例如,突出显示一整周,突出显示的第一天是开始日期,突出显示的最后一天是结束日期。

下面是我目前如何使用日历的代码(工作正常,只想减少到一个):

self.opt_startdate=cal.CalendarCtrl(panel,-1,wx.calendar._pydate2wxdate(opt_s),pos=(70,105))
self.opt_enddate=cal.CalendarCtrl(panel,-1,wx.calendar._pydate2wxdate(opt_e),pos=(300,105))

self.opt_startdate.Bind(cal.EVT_CALENDAR_SEL_CHANGED, self.opt_OnCalSelectedstart)
self.opt_enddate.Bind(cal.EVT_CALENDAR_SEL_CHANGED, self.opt_OnCalSelectedend)

def opt_OnCalSelectedstart(self,event): #Obtain Start Date on Calendar

    date=self.opt_startdate.GetDate()
    day=date.GetDay()
    month=date.GetMonth()+1
    year=date.GetYear()
    opt_s=datetime.datetime(year,month,day)

def opt_OnCalSelectedend(self,event): #Obtain End Date on Calendar

    date=self.opt_enddate.GetDate()
    day=date.GetDay()
    month=date.GetMonth()+1
    year=date.GetYear()
    opt_e=datetime.datetime(year,month,day)
4

1 回答 1

1

至于选择 - 您可以为每个数据单独设置属性(即您可以突出显示它们) - 因此对于给定的范围,您可以将其设置为显示背景,看起来像一个选择。

然而……你想如何选择结局?看起来 wxCalendarCtrl 在左键单击事件上生成这些事件。您需要手动捕获右键单击事件以标记结束(或者只是让第一次左键单击选择开始,第二次右键单击选择结束,下一次右键单击选择再次开始)?理想情况下,当您将鼠标悬停在日期上时,它会突出显示,就好像您在实际选择它之前选择它作为结束一样。这可能是很多工作。

otoh,许多现实世界的实现都使用“弹出”的单选择器 - 即在显示当前值的文本旁边会有一个小按钮,然后按下按钮会弹出一个日历控件,让您选择该日期。我不认为拥有这两个是不寻常的......

于 2013-10-16T18:47:32.253 回答