The following code works well to hide and show widgets, except that when I try to show the widget, it puts it in the top left corner of the frame instead of where I have it added to the sizer. If anyone could help, it would be greatly appreciated.
import wx
import wx.adv
import wx.ribbon
from datetime import datetime
import calendar
Date variables
c_date = datetime.today()
day_choices_list = [‘1st’, ‘2nd’, ‘3rd’, ‘4th’, ‘Every’, ‘Last’]
days_list = [‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, ‘Sat’]
mil_times = [‘0100’, ‘0115’, ‘0130’, ‘0145’,
‘0200’, ‘0215’, ‘0230’, ‘0245’,
‘0300’, ‘0315’, ‘0330’, ‘0345’,
‘0400’, ‘0415’, ‘0430’, ‘0445’,
‘0500’, ‘0515’, ‘0530’, ‘0545’,
‘0600’, ‘0615’, ‘0630’, ‘0645’,
‘0700’, ‘0715’, ‘0730’, ‘0745’,
‘0800’, ‘0815’, ‘0830’, ‘0845’,
‘0900’, ‘0915’, ‘0930’, ‘0945’,
‘1000’, ‘1015’, ‘1030’, ‘1045’,
‘1100’, ‘1115’, ‘1130’, ‘1145’,
‘1200’, ‘1215’, ‘1230’, ‘1245’,
‘1300’, ‘1315’, ‘1330’, ‘1345’,
‘1400’, ‘1415’, ‘1430’, ‘1445’,
‘1500’, ‘1515’, ‘1530’, ‘1545’,
‘1600’, ‘1615’, ‘1630’, ‘1645’,
‘1700’, ‘1715’, ‘1730’, ‘1745’,
‘1800’, ‘1815’, ‘1830’, ‘1845’,
‘1900’, ‘1915’, ‘1930’, ‘1945’,
‘2000’, ‘2015’, ‘2030’, ‘2045’,
‘2100’, ‘2115’, ‘2130’, ‘2145’,
‘2200’, ‘2215’, ‘2230’, ‘2245’,
‘2300’, ‘2315’, ‘2330’, ‘2345’,
‘0000’, ‘0015’, ‘0030’, ‘0045’,
]
class MyFrame(wx.Frame):
def __init__(self):
screen_size = wx.DisplaySize()
screen_width = screen_size[0]
screen_height = screen_size[1]
max_width = int(screen_width *.90)
max_height = int(screen_height * .80)
super().__init__(parent=None, title='Leader\'s Notebook', size=(max_width, max_height))
self.Center()
font1 = wx.Font(12, wx.DECORATIVE, wx.NORMAL, wx.NORMAL)
mainPanel = wx.Panel(self)
mainPanel.SetFont(font1)
mainPanel.SetBackgroundColour((217, 234, 211)) # RGB values for green
event_libraries = ['US Holidays', 'Birthdays',]
months_list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# rows, cols
my_sizer = wx.GridBagSizer(10, 10)
# widgets
header_margin = wx.StaticText(mainPanel, label='')
left_margin = wx.StaticText(mainPanel, label=' ')
self.select_library = wx.StaticText(mainPanel, label='Select Library')
self.library_combo = wx.ComboBox(mainPanel, choices=event_libraries, style=wx.CB_SORT)
self.event_info = wx.StaticText(mainPanel, label='Event Information')
self.event_name = wx.StaticText(mainPanel, label='Event')
self.event_title_entry = wx.TextCtrl(mainPanel)
self.event_participants = wx.StaticText(mainPanel, label='Participants')
self.event_participants_entry = wx.TextCtrl(mainPanel)
self.event_location = wx.StaticText(mainPanel, label='Location')
self.event_location_entry = wx.TextCtrl(mainPanel)
self.month_day = wx.StaticText(mainPanel, label='Date')
self.start_date_picker = wx.adv.DatePickerCtrl(mainPanel, size= (130, -1),style = wx.adv.DP_DROPDOWN
| wx.adv.DP_SHOWCENTURY
| wx.adv.DP_ALLOWNONE)
self.time_all_day = wx.CheckBox(mainPanel, label='All Day',)
self.time_all_day.SetValue(True)
self.time_part_day = wx.StaticText(mainPanel, label='From',)
self.time_part_day.Hide()
self.start_time = wx.ComboBox(mainPanel, size=(70, -1), choices=mil_times, )
self.start_time.Hide()
self.time_to = wx.StaticText(mainPanel, label=' To ')
self.time_to.Hide()
self.end_time = wx.ComboBox(mainPanel, size=(70, -1), choices=mil_times, )
self.end_time.Hide()
self.recurring = wx.CheckBox(mainPanel, label='Repeats', )
# these widgets hidden by default
self.weekly = wx.RadioButton(mainPanel, label="Every Week on", )
self.weekly.Hide()
self.monthly = wx.RadioButton(mainPanel, label='Every Month', )
self.monthly.Hide()
self.annual = wx.RadioButton(mainPanel, label='Every Year', )
self.annual.Hide()
self.sun_cb = wx.CheckBox(mainPanel, label='Sun')
self.sun_cb.Hide()
self.mon_cb = wx.CheckBox(mainPanel, label='Mon')
self.mon_cb.Hide()
self.tue_cb = wx.CheckBox(mainPanel, label='Tue')
self.tue_cb.Hide()
self.wed_cb = wx.CheckBox(mainPanel, label='Wed')
self.wed_cb.Hide()
self.thu_cb = wx.CheckBox(mainPanel, label='Thu')
self.thu_cb.Hide()
self.fri_cb = wx.CheckBox(mainPanel, label='Fri')
self.fri_cb.Hide()
self.sat_cb = wx.CheckBox(mainPanel, label='Sat')
self.sat_cb.Hide()
self.same_day = wx.RadioButton(mainPanel, 22, label='On the Same Day', style=wx.RB_GROUP)
self.same_day.Hide()
self.number_day = wx.RadioButton(mainPanel, label='On', )
self.number_day.Hide()
self.day_number = wx.ComboBox(mainPanel, size=(70, -1), choices=day_choices_list)
self.day_number.Hide()
self.weekday = wx.ComboBox(mainPanel, size=(70, -1), choices=days_list)
self.weekday.Hide()
self.same_day2 = wx.RadioButton(mainPanel, 22, label='On the Same Day', style=wx.RB_GROUP)
self.same_day2.Hide()
self.number_day2 = wx.RadioButton(mainPanel, label='On', )
self.number_day2.Hide()
self.day_number2 = wx.ComboBox(mainPanel, size=(70, -1), choices=day_choices_list, )
self.day_number2.Hide()
self.weekday2 = wx.ComboBox(mainPanel, size=(70, -1), choices=days_list )
self.weekday2.Hide()
self.month = wx.StaticText(mainPanel, label=' of ')
self.month.Hide()
self.month_combo2 = wx.ComboBox(mainPanel, choices=months_list, )
self.month_combo2.Hide()
self.ending_date = wx.StaticText(mainPanel, label='Ending on')
self.ending_date.Hide()
self.end_date_picker = wx.adv.DatePickerCtrl(mainPanel, size=(130, -1), style=wx.adv.DP_DROPDOWN
| wx.adv.DP_SHOWCENTURY
| wx.adv.DP_ALLOWNONE)
self.end_date_picker.Hide()
# layout
my_sizer.Add(header_margin, pos=(0, 0), span=(0, 25), flag=wx.EXPAND)
my_sizer.Add(left_margin, pos=(1, 0), flag=wx.EXPAND)
my_sizer.Add(self.select_library, pos=(1, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.library_combo, pos=(1, 2),flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_info, pos=(3, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_name, pos=(4, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_title_entry, pos=(4, 2), span=(0, 3), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_participants, pos=(5, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_participants_entry, pos=(5, 2), span=(0, 3), flag=wx.EXPAND
|wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_location, pos=(6, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.event_location_entry, pos=(6, 2), span=(0, 3), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.month_day, pos=(8, 1), flag=wx.EXPAND |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.start_date_picker, pos=(8, 2), flag=wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.time_all_day, pos=(8, 3), flag=wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.time_part_day, pos=(8, 4), flag=wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.start_time, pos=(9, 4), flag=wx.EXPAND)
my_sizer.Add(self.time_to, pos=(9, 5), flag=wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.end_time, pos=(9, 6), flag=wx.EXPAND)
my_sizer.Add(self.recurring, pos=(11, 1))
my_sizer.Add(self.weekly, pos=(11, 2))
my_sizer.Add(self.sun_cb, pos=(11, 4), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.mon_cb, pos=(11, 5), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.tue_cb, pos=(11, 6), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.wed_cb, pos=(11, 7), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.thu_cb, pos=(11, 8), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.fri_cb, pos=(11, 9), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.sat_cb, pos=(11, 10), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.monthly, pos=(12, 2), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.same_day, pos=(12, 3), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.number_day, pos=(13, 3), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.day_number, pos=(13, 4), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.weekday, pos=(13, 5), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.annual, pos=(14,2), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.same_day2, pos=(14, 3), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.number_day2, pos=(15, 3), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.day_number2, pos=(15, 4), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.weekday2, pos=(15, 5), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.month, pos=(15, 6), flag=wx.ALIGN_CENTER_HORIZONTAL |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.month_combo2, pos=(15, 7), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.ending_date, pos=(16, 2), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
my_sizer.Add(self.end_date_picker, pos=(16, 3), flag=wx.ALIGN_LEFT |wx.ALIGN_CENTER_VERTICAL)
self.time_all_day.Bind(wx.EVT_CHECKBOX, self.show_time_selection)
mainPanel.SetSizer(my_sizer)
self.Show()
def show_time_selection(self, event):
if self.time_all_day.IsChecked():
self.time_part_day.Hide()
# self.start_time.Hide()
# self.time_to.Hide()
# self.end_time.Hide()
print('All Day is checked')
else:
print('All Day is unchecked')
self.time_part_day.Show()
MyFrame.Layout(self)
if name == ‘main’:
app = wx.App()
frame = MyFrame()
app.MainLoop()