Hide widget works, cannot show widget

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()

As expected, after I posted the question, I found the answer.

I changed my_sizer = wx.GridBagSizer(10, 10) to self.my_sizer = wx.GridBagSizer(10, 10) and added self.my_sizer.Layout() to my show_time_selection function.

1 Like