把它们放在同一个课堂上,就像使用
wx.DatePickerCtrl
import wx
import wx.calendar
import time
class MyCalendar(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent, wx.ID_ANY, "Calendar",size=(300,300))
self.Panel = wx.Panel(self)
self.cal = wx.calendar.CalendarCtrl(self.Panel, 10, wx.DateTime.Now())
self.cal.Bind(wx.calendar.EVT_CALENDAR, self.OnDate)
self.Show()
def OnDate(self,event):
self.Destroy()
return self.cal.GetDate()
class Myframe(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.Panel = wx.Panel(self)
self.Button = wx.Button(self.Panel, label="Calendar",size=(60,25),pos=(10,300))
self.Selected = wx.TextCtrl(self.Panel, -1,"Selected Date",size=(300,25),pos=(10,50))
self.Button.Bind(wx.EVT_BUTTON, self.ShowCal)
self.Show()
def ShowCal(self,event):
now = wx.DateTime.Now()
now.SetHMS(0)
self.Selected_date = MyCalendar(self.Panel)
while self.Selected_date and self.Selected_date.cal.GetDate() == now:
wx.Yield()
time.sleep(0.1)
try:
self.Selected.SetValue(str(self.Selected_date.cal.GetDate()))
except:
self.Selected.SetValue("Nothing selected")
if __name__ == '__main__':
app = wx.App()
frame = Myframe(None)
app.MainLoop()
我确信一定有更优雅的方式来实现这一点,希望其他人能给出答案,但正如你们所看到的,我选择了等待
while
循环直到结果不是
Now
被选中,并且
现在
编辑:
答案是使用
event
,由日历日期选择触发(双击日期)
import wx
import wx.adv
import datetime
import wx.lib.newevent
cal_event, EVT_CAL_EVENT = wx.lib.newevent.NewEvent()
class MyCalendar(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent, wx.ID_ANY, "Calendar",size=(300,300))
self.parent = parent
self.Panel = wx.Panel(self)
self.cal = wx.adv.CalendarCtrl(self.Panel, 10, wx.DateTime.Now())
self.cal.Bind(wx.adv.EVT_CALENDAR, self.OnDate)
self.Show()
def OnDate(self,event):
evt = cal_event(data=self.cal.GetDate())
wx.PostEvent(self, evt) #post EVT_CAL_EVENT
class Myframe(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.Panel = wx.Panel(self)
self.Button = wx.Button(self.Panel, label="Calendar",size=(60,25),pos=(10,300))
self.Selected = wx.TextCtrl(self.Panel, -1,"Selected Date",size=(300,25),pos=(10,50))
self.Button.Bind(wx.EVT_BUTTON, self.ShowCal)
self.Show()
def ShowCal(self,event):
now = wx.DateTime.Now()
now.SetHMS(0)
self.Selected_date = MyCalendar(self)
self.Selected_date.Bind(EVT_CAL_EVENT, self.GetCal)
def GetCal(self,event):
ymd = map(int, event.data.FormatISODate().split('-'))
d = datetime.date(*ymd) # Convert to a datetime so we can use standard formatting
self.Selected.SetValue(d.strftime("%a - %d/%m/%Y"))
self.Selected_date.Destroy()
del self.Selected_date
if __name__ == '__main__':
app = wx.App()
frame = Myframe(None)
app.MainLoop()