pyqtgraph/pyqtgraph/parametertree/parameterTypes/calendar.py
ntjess 4bf1866c2a
Organize paramtypes (#1919)
* Registered parameter types go in their own files

* Moves [int, float] item definitions outside `WidgetParameterItem`

* Moves [int, float] parameter definitions outside `WidgetParameterItem`

* Allow registering ParameterItems for easy parameter defs

* Finalizes moving simple parameters to their own files

* removes accidentally committed file

* Provides class qualnames in rst

* Address docstring build issues

* Address recent review comments
- `registerParameterItemType`:
  * added to docs and parametertree.__init__
  * Remove unsed PARAM_TYPES global
  * Hyperlink to `registerParameterType`
- parameter tree rst:
  * Alphabetize entries
  * Rebuild RST without fully qualified class name
  * Add note at file header that it is auto generated

* Remove spurious space during rst doc creation

* Ensure created/modified files end with newline

* Address CodeQL warnings

* toPlainText also returns str

* `QTreeWidgetItem.text` returns str
2021-08-02 10:47:55 -07:00

56 lines
1.9 KiB
Python

from ...Qt import QtWidgets, QtCore
from .. import Parameter
from .basetypes import WidgetParameterItem
class CalendarParameterItem(WidgetParameterItem):
def makeWidget(self):
self.asSubItem = True
w = QtWidgets.QCalendarWidget()
w.setMaximumHeight(200)
w.sigChanged = w.selectionChanged
w.value = w.selectedDate
w.setValue = w.setSelectedDate
self.hideWidget = False
self.param.opts.setdefault('default', QtCore.QDate.currentDate())
return w
class CalendarParameter(Parameter):
"""
Displays a Qt calendar whose date is specified by a 'format' option.
============== ========================================================
**Options:**
format Format for displaying the date and converting from a string. Can be any value accepted by
`QDate.toString` and `fromString`, or a stringified version of a QDateFormat enum, i.e. 'ISODate',
'TextDate' (default), etc.
============== ========================================================
"""
itemClass = CalendarParameterItem
def __init__(self, **opts):
opts.setdefault('format', 'TextDate')
super().__init__(**opts)
def _interpretFormat(self, fmt=None):
fmt = fmt or self.opts.get('format')
if hasattr(QtCore.Qt.DateFormat, fmt):
fmt = getattr(QtCore.Qt.DateFormat, fmt)
return fmt
def _interpretValue(self, v):
if isinstance(v, str):
fmt = self._interpretFormat()
if fmt is None:
raise ValueError('Cannot parse date string without a set format')
v = QtCore.QDate.fromString(v, fmt)
return v
def saveState(self, filter=None):
state = super().saveState(filter)
fmt = self._interpretFormat()
state['value'] = state['value'].toString(fmt)
return state