From e35fdd851871524fa515bdd748c0512bbb0b61dd Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Fri, 17 May 2019 12:12:38 +0200 Subject: [PATCH 1/5] Allow calendar button locale Fixes half of #977 --- PySimpleGUI.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 26f23d62..95873295 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1632,7 +1632,7 @@ class Button(Element): root = tk.Toplevel() root.title('Calendar Chooser') root.wm_attributes("-topmost", 1) - self.TKCal = TKCalendar(master=root, firstweekday=calendar.SUNDAY, target_element=target_element, close_when_chosen=self.CalendarCloseWhenChosen, default_date=self.DefaultDate_M_D_Y ) + self.TKCal = TKCalendar(master=root, firstweekday=calendar.SUNDAY, target_element=target_element, close_when_chosen=self.CalendarCloseWhenChosen, default_date=self.DefaultDate_M_D_Y, locale=self.CalendarLocale) self.TKCal.pack(expand=1, fill='both') root.update() @@ -4425,9 +4425,10 @@ def CalendarButton(button_text, target=(None, None), close_when_date_chosen=True image_filename=image_filename, image_data=image_data, image_size=image_size, image_subsample=image_subsample, border_width=border_width, tooltip=tooltip, size=size, auto_size_button=auto_size_button, button_color=button_color, font=font, disabled=disabled, - bind_return_key=bind_return_key, focus=focus, pad=pad, key=key) + bind_return_key=bind_return_key, focus=focus, pad=pad, key=key, locale=None) button.CalendarCloseWhenChosen = close_when_date_chosen button.DefaultDate_M_D_Y = default_date_m_d_y + button.CalendarLocale = locale return button From 7aa110b1fe1066fda37cd4f95b60e04b318fb903 Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Fri, 17 May 2019 13:11:55 +0200 Subject: [PATCH 2/5] Multiple improvements on CalendarButton Allow passing optional format argument (as of datetime.strftime() format given https://docs.python.org/3.6/library/datetime.html?highlight=strftime#strftime-strptime-behavior) Also use current timestamp when updating calendar instead of 00:00:00 --- PySimpleGUI.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 95873295..2e3e4944 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1632,7 +1632,7 @@ class Button(Element): root = tk.Toplevel() root.title('Calendar Chooser') root.wm_attributes("-topmost", 1) - self.TKCal = TKCalendar(master=root, firstweekday=calendar.SUNDAY, target_element=target_element, close_when_chosen=self.CalendarCloseWhenChosen, default_date=self.DefaultDate_M_D_Y, locale=self.CalendarLocale) + self.TKCal = TKCalendar(master=root, firstweekday=calendar.SUNDAY, target_element=target_element, close_when_chosen=self.CalendarCloseWhenChosen, default_date=self.DefaultDate_M_D_Y, locale=self.CalendarLocale, format=self.CalendarFormat) self.TKCal.pack(expand=1, fill='both') root.update() @@ -2944,6 +2944,9 @@ class TKCalendar(ttk.Frame): locale = kw.pop('locale', None) sel_bg = kw.pop('selectbackground', '#ecffc4') sel_fg = kw.pop('selectforeground', '#05640e') + self.format = kw.pop('format') + if self.format is None: + self.format = '%Y-%m-%d %H:%M:%S' self._date = self.datetime(year, month, default_day or 1) self._selection = None # no date selected @@ -3097,8 +3100,9 @@ class TKCalendar(ttk.Frame): self._selection = (text, item, column) self._show_selection(text, bbox) year, month = self._date.year, self._date.month + now = self.datetime.now() try: - self._TargetElement.Update(self.datetime(year, month, int(self._selection[0]))) + self._TargetElement.Update(self.datetime(year, month, int(self._selection[0]), now.hour, now.minute, now.second).strftime(self.format)) if self._TargetElement.ChangeSubmits: self._TargetElement.ParentForm.LastButtonClicked = self._TargetElement.Key self._TargetElement.ParentForm.FormRemainedOpen = True @@ -4420,15 +4424,16 @@ def DummyButton(button_text, image_filename=None, image_data=None, image_size=(N def CalendarButton(button_text, target=(None, None), close_when_date_chosen=True, default_date_m_d_y=(None,None,None), image_filename=None, image_data=None, image_size=(None, None), image_subsample=None, tooltip=None, border_width=None, size=(None, None), auto_size_button=None, button_color=None, disabled=False, font=None, bind_return_key=False, focus=False, pad=None, - key=None): + key=None, locale=None, format=None): button = Button(button_text=button_text, button_type=BUTTON_TYPE_CALENDAR_CHOOSER, target=target, image_filename=image_filename, image_data=image_data, image_size=image_size, image_subsample=image_subsample, border_width=border_width, tooltip=tooltip, size=size, auto_size_button=auto_size_button, button_color=button_color, font=font, disabled=disabled, - bind_return_key=bind_return_key, focus=focus, pad=pad, key=key, locale=None) + bind_return_key=bind_return_key, focus=focus, pad=pad, key=key) button.CalendarCloseWhenChosen = close_when_date_chosen button.DefaultDate_M_D_Y = default_date_m_d_y button.CalendarLocale = locale + button.CalendarFormat = format return button From 4d137e19c42ac85aecdd72e94cfbbe0f8d0242cb Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Fri, 17 May 2019 13:17:24 +0200 Subject: [PATCH 3/5] Merge PR #1433 to avoid conflicts as same lines affected --- PySimpleGUI.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 2e3e4944..a81f0bc9 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1635,6 +1635,15 @@ class Button(Element): self.TKCal = TKCalendar(master=root, firstweekday=calendar.SUNDAY, target_element=target_element, close_when_chosen=self.CalendarCloseWhenChosen, default_date=self.DefaultDate_M_D_Y, locale=self.CalendarLocale, format=self.CalendarFormat) self.TKCal.pack(expand=1, fill='both') root.update() + + if type(Window.user_defined_icon) is bytes: + calendar_icon = tkinter.PhotoImage(data=Window.user_defined_icon) + else: + calendar_icon = DEFAULT_BASE64_ICON + try: + root.tk.call('wm', 'iconphoto', root._w, calendar_icon) + except: + pass if should_submit_window: self.ParentForm.LastButtonClicked = target_element.Key From f563f01ed8363c48a6a38ba3e575984105383c3d Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Fri, 17 May 2019 13:18:30 +0200 Subject: [PATCH 4/5] Fix indentation error while merging PRs --- PySimpleGUI.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index a81f0bc9..3851fe1f 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1636,7 +1636,7 @@ class Button(Element): self.TKCal.pack(expand=1, fill='both') root.update() - if type(Window.user_defined_icon) is bytes: + if type(Window.user_defined_icon) is bytes: calendar_icon = tkinter.PhotoImage(data=Window.user_defined_icon) else: calendar_icon = DEFAULT_BASE64_ICON From 8ff3c80f23fc9fa5a65a25ee5d91884f26ac6d82 Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Sun, 19 May 2019 14:18:58 +0200 Subject: [PATCH 5/5] Fix default PySimpleGUI icon never used in CalendarButton --- PySimpleGUI.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 3851fe1f..37cfa4ac 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1639,7 +1639,7 @@ class Button(Element): if type(Window.user_defined_icon) is bytes: calendar_icon = tkinter.PhotoImage(data=Window.user_defined_icon) else: - calendar_icon = DEFAULT_BASE64_ICON + calendar_icon = tkinter.PhotoImage(data=DEFAULT_BASE64_ICON) try: root.tk.call('wm', 'iconphoto', root._w, calendar_icon) except: