Browse Source

Implementation of the TimeChooser widget.

pull/575/head
Nathan Richard 6 years ago
committed by Chris
parent
commit
e28da8503b
11 changed files with 110 additions and 52 deletions
  1. 4
      README.md
  2. 8
      gooey/gui/components/widgets/choosers.py
  3. 2
      gooey/gui/components/widgets/core/__init__.py
  4. 11
      gooey/gui/components/widgets/core/chooser.py
  5. 56
      gooey/gui/components/widgets/dialogs/base_dialog.py
  6. 57
      gooey/gui/components/widgets/dialogs/calender_dialog.py
  7. 12
      gooey/gui/components/widgets/dialogs/time_dialog.py
  8. 5
      gooey/gui/three_to_four.py
  9. 2
      gooey/languages/english.json
  10. 4
      gooey/languages/french.json
  11. 1
      gooey/python_bindings/argparse_to_json.py

4
README.md

@ -195,8 +195,8 @@ However, by dropping in `GooeyParser` and supplying a `widget` name, you can dis
| Widget | Example |
|----------------|------------------------------|
| DirChooser, MultiDirChooser, FileChooser, MultiFileChooser, FileSaver | <p align="center"><img src="https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/f5483b28-07c5-11e5-9d01-1935635fc22d.gif" width="400"></p> |
| DateChooser &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <p align="center"><img src="https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/f544756a-07c5-11e5-86d6-862ac146ad35.gif" width="400"></p> |
| DirChooser, FileChooser, MultiFileChooser, FileSaver, MultiFileSaver | <p align="center"><img src="https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/f5483b28-07c5-11e5-9d01-1935635fc22d.gif" width="400"></p> |
| DateChooser/TimeChooser &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <p align="center"><img src="https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/f544756a-07c5-11e5-86d6-862ac146ad35.gif" width="400"></p> <p>Please note that for both of these widgets the values passed to the application will always be in [ISO format](https://www.wxpython.org/Phoenix/docs/html/wx.DateTime.html#wx.DateTime.FormatISOTime) while localized values may appear in some parts of the GUI depending on end-user settings.</p> |
| PasswordField | <p align="center"><img src="https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/28953722-eae72cca-788e-11e7-8fa1-9a1ef332a053.png" width="400"></p> |
| Listbox | ![image](https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/31590191-fadd06f2-b1c0-11e7-9a49-7cbf0c6d33d1.png) |
| BlockCheckbox | ![image](https://github.com/chriskiehl/GooeyImages/raw/images/readme-images/46922288-9296f200-cfbb-11e8-8b0d-ddde08064247.png) <br/> The default InlineCheck box can look less than ideal if a large help text block is present. `BlockCheckbox` moves the text block to the normal position and provides a short-form `block_label` for display next to the control. Use `gooey_options.checkbox_label` to control the label text |

8
gooey/gui/components/widgets/choosers.py

@ -10,9 +10,11 @@ __ALL__ = [
'DirChooser',
'MultiDirChooser',
'DateChooser',
'ColourChooser'
'ColourChooser',
'TimeChooser'
]
class FileChooser(BaseChooser):
# todo: allow wildcard from argparse
widget_class = core.FileChooser
@ -51,3 +53,7 @@ class DateChooser(BaseChooser):
class ColourChooser(BaseChooser):
widget_class = core.ColourChooser
class TimeChooser(BaseChooser):
widget_class = core.TimeChooser

2
gooey/gui/components/widgets/core/__init__.py

@ -1,2 +1,2 @@
from . chooser import Chooser, FileChooser, FileSaver, DirChooser, DateChooser, MultiFileChooser, MultiDirChooser, ColourChooser
from . chooser import Chooser, FileChooser, FileSaver, DirChooser, DateChooser, TimeChooser, MultiFileChooser, MultiDirChooser, ColourChooser
from . text_input import PasswordInput, MultilineTextInput, TextInput

11
gooey/gui/components/widgets/core/chooser.py

@ -5,6 +5,7 @@ import re
from gooey.gui.components.widgets.core.text_input import TextInput
from gooey.gui.components.widgets.dialogs.calender_dialog import CalendarDlg
from gooey.gui.components.widgets.dialogs.time_dialog import TimeDlg
from gooey.gui.lang.i18n import _
from gooey.util.functional import merge
@ -140,6 +141,16 @@ class DateChooser(Chooser):
def getDialog(self):
return CalendarDlg(self)
class TimeChooser(Chooser):
""" Launches a time picker which returns and ISO Time """
def __init__(self, *args, **kwargs):
defaults = {'label': _('choose_time')}
super(TimeChooser, self).__init__(*args, **merge(kwargs, defaults))
def getDialog(self):
return TimeDlg(self)
class ColourChooser(Chooser):
""" Launches a color picker which returns a hex color code"""

56
gooey/gui/components/widgets/dialogs/base_dialog.py

@ -0,0 +1,56 @@
from gooey.gui.lang.i18n import _
import wx
from gooey.gui.three_to_four import Constants
class BaseDialog(wx.Dialog):
"""
Common base for CalendarDlg and TimeDlg.
"""
def __init__(self, parent, pickerClass, pickerGetter, localizedPickerLabel):
wx.Dialog.__init__(self, parent, title=localizedPickerLabel)
self.SetBackgroundColour('#ffffff')
self.ok_button = wx.Button(self, wx.ID_OK, label=_('ok'))
self.picker = pickerClass(self, style=Constants.WX_DP_DROPDOWN)
self.pickerGetter = pickerGetter
vertical_container = wx.BoxSizer(wx.VERTICAL)
vertical_container.AddSpacer(10)
vertical_container.Add(self.picker, 0, wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER, 15)
vertical_container.AddSpacer(10)
button_sizer = wx.BoxSizer(wx.HORIZONTAL)
button_sizer.AddStretchSpacer(1)
button_sizer.Add(self.ok_button, 0)
vertical_container.Add(button_sizer, 0, wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER, 15)
vertical_container.AddSpacer(20)
self.SetSizerAndFit(vertical_container)
self.Bind(wx.EVT_BUTTON, self.onOkButton, self.ok_button)
def onOkButton(self, event):
self.EndModal(wx.ID_OK)
event.Skip()
def onCancelButton(self, event):
try:
return None
except:
self.Close()
def GetPath(self):
"""
Return the value chosen in the picker.
The method is called GetPath() instead of getPath() to emulate the WX Pickers API.
This allows the Chooser class to work same way with native WX dialogs or childs of BaseDialog.
"""
return self.pickerGetter(self.picker)

57
gooey/gui/components/widgets/dialogs/calender_dialog.py

@ -1,52 +1,13 @@
from gooey.gui.lang.i18n import _
__author__ = 'Chris'
import wx
from gooey.gui.util import wx_util
from gooey.gui.three_to_four import Classes, Constants
class CalendarDlg(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent)
self.SetBackgroundColour('#ffffff')
self.ok_button = wx.Button(self, wx.ID_OK, label=_('ok'))
self.datepicker = Classes.DatePickerCtrl(self, style=Constants.WX_DP_DROPDOWN)
vertical_container = wx.BoxSizer(wx.VERTICAL)
vertical_container.AddSpacer(10)
vertical_container.Add(wx_util.h1(self, label=_('select_date')), 0, wx.LEFT | wx.RIGHT, 15)
vertical_container.AddSpacer(10)
vertical_container.Add(self.datepicker, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 15)
vertical_container.AddSpacer(10)
button_sizer = wx.BoxSizer(wx.HORIZONTAL)
button_sizer.AddStretchSpacer(1)
button_sizer.Add(self.ok_button, 0)
vertical_container.Add(button_sizer, 0, wx.LEFT | wx.RIGHT, 15)
vertical_container.AddSpacer(20)
self.SetSizerAndFit(vertical_container)
self.Bind(wx.EVT_BUTTON, self.OnOkButton, self.ok_button)
def OnOkButton(self, event):
self.EndModal(wx.ID_OK)
event.Skip()
def OnCancellButton(self, event):
try:
return None
except:
self.Close()
def GetPath(self):
return self.datepicker.GetValue().FormatISODate()
from .base_dialog import BaseDialog
from gooey.gui.three_to_four import Classes
from gooey.gui.lang.i18n import _
class CalendarDlg(BaseDialog):
def __init__(self, parent):
super(CalendarDlg, self).__init__(parent,
pickerClass=Classes.DatePickerCtrl,
pickerGetter=lambda datepicker: datepicker.GetValue().FormatISODate(),
localizedPickerLabel=_('select_date'))

12
gooey/gui/components/widgets/dialogs/time_dialog.py

@ -0,0 +1,12 @@
from .base_dialog import BaseDialog
from gooey.gui.three_to_four import Classes
from gooey.gui.lang.i18n import _
class TimeDlg(BaseDialog):
def __init__(self, parent):
super(TimeDlg, self).__init__(parent,
pickerClass=Classes.TimePickerCtrl,
pickerGetter=lambda datepicker: datepicker.GetValue().FormatISOTime(),
localizedPickerLabel=_('select_time'))

5
gooey/gui/three_to_four.py

@ -26,6 +26,11 @@ class Classes:
else:
DatePickerCtrl = wx.DatePickerCtrl
if isLatestVersion:
TimePickerCtrl = wx.adv.TimePickerCtrl
else:
TimePickerCtrl = wx.TimePickerCtrl

2
gooey/languages/english.json

@ -4,6 +4,7 @@
"checkbox_label": "Enable",
"choose_colour": "Choose Colour",
"choose_date": "Choose Date",
"choose_time": "Choose Time",
"choose_file": "Choose File",
"choose_folder": "Choose Folder",
"choose_folders_msg": "Choose one or more folders:",
@ -29,6 +30,7 @@
"running_msg": "Please wait while the application performs its tasks. \nThis may take a few moments",
"running_title": "Running",
"select_date": "Select a Date",
"select_time": "Select a Time",
"select_option": "Select Option",
"settings_title": "Settings",
"simple_config": "Enter Command Line Arguments",

4
gooey/languages/french.json

@ -2,6 +2,7 @@
"browse": "Naviguer",
"cancel": "Annuler",
"choose_date": "Choisir une date",
"choose_time": "Choisir une heure",
"choose_file": "Choisir un fichier",
"choose_folder": "Choisir un dossier",
"choose_one": "Choisir entre :",
@ -16,12 +17,15 @@
"finished_forced_quit": "Stoppé par l'utilisateur",
"finished_msg": "Terminé ! Vous pouvez maintenant fermer le programme.",
"finished_title": "Terminé",
"ok": "Ok",
"open_file": "Ouvrir fichier",
"optional_args_msg": "Arguments optionnels",
"required_args_msg": "Arguments obligatoires",
"restart": "Redémarrer",
"running_msg": "Veuillez attendre la fin de l'exécution. \nCela peut prendre quelques instants.",
"running_title": "Exécution en cours.",
"select_date": "Sélectionner une date",
"select_time": "Sélectionner une heure",
"select_option": "Sélectionner une option",
"settings_title": "Paramètres",
"simple_config": "Entrer les arguments de ligne de commande",

1
gooey/python_bindings/argparse_to_json.py

@ -26,6 +26,7 @@ VALID_WIDGETS = (
'FileSaver',
'DirChooser',
'DateChooser',
'TimeChooser',
'TextField',
'Dropdown',
'Counter',

Loading…
Cancel
Save