如何制作打开日历然后选择日期并关闭日期的按钮? 到目前为止,我只管理创建日历(我不明白为什么它总是创建2)。但我无法弄清楚如何获得选定的日期。我在Python 3上使用pythonwx。
class MyCalendar(wx.Frame):
def __init__(self, *args, **kargs):
wx.Frame.__init__(self, *args, **kargs)
self.cal = CalendarCtrl(self, 10, wx.DateTime.Now())
self.timer = wx.Timer(self)
if __name__ == '__main__':
app = wx.App()
frame = MyCalendar(None)
frame.Show()
app.MainLoop()
修改
添加py3版本
from wx.adv import CalendarCtrl, GenericCalendarCtrl, CalendarDateAttr
class MyCalendar(wx.Frame):
def __init__(self, *args, **kargs):
wx.Frame.__init__(self, *args, **kargs)
self.cal = CalendarCtrl(self, 10, wx.DateTime.Now())
self.cal.Bind(wx.adv.EVT_CALENDAR, self.OnDate)
def OnDate(self,event):
print (self.cal.GetDate())
wx.Window.Close(self)
答案 0 :(得分:1)
import wx
import wx.adv
class MyCalendar(wx.Frame):
def __init__(self, *args, **kargs):
wx.Frame.__init__(self, *args, **kargs)
self.cal = wx.adv.CalendarCtrl(self, 10, wx.DateTime.Now())
self.cal.Bind(wx.adv.EVT_CALENDAR, self.OnDate)
def OnDate(self,event):
print(self.cal.GetDate())
if __name__ == '__main__':
app = wx.App()
frame = MyCalendar(None)
frame.Show()
app.MainLoop()
现在双击日期。
我会让你研究创建一个框架/面板并在上面放一个按钮,以激活日历。
答案 1 :(得分:0)
这个简单的请求比它最初看起来要复杂得多,因为你必须等待日期选择的结果,而不是现在,而不会使它复杂化。
将所有内容放在同一个类中会使生活更轻松,就像使用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
而今天已将Now
调整为午夜,因为这是日历返回的内容。
您必须调整wxpython Phoenix
的代码,因为我仍然使用经典。