1. 期望实现功能
列表框选择“创建日期”后自动在界面最右侧显示日历,用户鼠标选中最右侧的日历日期后,文本框中自动显示查询日期的上下限,用户可以获取文本框中的日期,再点击“查询”按钮实现查询数据功能。
2. wxFormBuilder工具的Additional页签选择wxCalendarCtrl控件
使用wxFormBuilder工具搭建基础界面,Additional页签选择wxCalendarCtrl控件后,依次在Frame上布局静态文本框、列表框、文本输入框和按钮,调整布局成期望实现日期选择的界面。
3. 代码实现
# 查询依据
self.m_choice2.Bind(wx.EVT_CHOICE, self.show_calendar)
self.last_date = ""
self.m_calendar1.Bind(wx.adv.EVT_CALENDAR, self.choice_last_date)
def show_calendar(self, event):
search_condition = self.m_choice2.GetString(self.m_choice2.GetSelection())
if search_condition in ["创建日期"]:
self.m_calendar1.Show()
else:
self.m_calendar1.Hide()
def choice_last_date(self, event):
last_date = event.GetDate()
value = str(last_date).split(" ")[0]
self.m_textCtrl25.SetValue(value)
self.last_date = value
self.m_calendar1.Bind(wx.adv.EVT_CALENDAR, self.choice_next_date)
def choice_next_date(self, event):
next_date = event.GetDate()
value = str(next_date).split(" ")[0]
if self.last_date.strip() != "":
value = self.last_date + "_" + value
self.m_textCtrl25.SetValue(value)
self.m_calendar1.Bind(wx.adv.EVT_CALENDAR, self.choice_last_date)
有关日历控件的触发事件wx.adv.EVT_CALENDAR可以查看如下链接地址理解。
链接地址:https://docs.wxpython.org/wx.adv.CalendarCtrl.html?highlight=calendarctrl#events-events-emitted-by-this-class
4. 界面效果
例如:查询7月份的数据,查询依据选择列表框中的“创建日期”,右侧自动显示日历,先鼠标左键双击选中7月1日,文本框自动显示“2022/7/1”;
再鼠标左键双击选中7月31日,文本框自动显示“2022/7/1_2022/7/31”。用户再选中一个日期即可取消当前文本框显示的“2022/7/1_2022/7/31”。
支持只选择一个日期进行查询,也支持前后两次鼠标左键双击选中相同的日期,如下图支持日期显示为“2022/7/2_2022/7/2”进行查询。