pyqttoolkit 0.8.3__tar.gz → 0.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/PKG-INFO +2 -2
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/_version.py +3 -3
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/matplotlib/base.py +70 -13
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit.egg-info/PKG-INFO +2 -2
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/MANIFEST.in +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/README.md +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/application/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/application/application.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/application/garbage_collector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/colors/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/base.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/composite.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/default.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/environment.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/multi_json_file.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/with_signal.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/config/with_value_changed.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/bits.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/cache.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/interval.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/message.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/data/names.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/datetime/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/datetime/datetime.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/datetime/qdatetime.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/dependencies/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/errors/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/exceptions/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/filesystem/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/logs/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/metadata/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/metadata/dataframe_metadata_manager.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/metadata/dict_metadata_manager.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/metadata/id_generator.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/metadata/metadata_manager_base.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/code_text.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/dataframetable.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/dictpropertytree.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/dicttable.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/json_text.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/list_model.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/module.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/roles.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/series_data.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/span.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/models/validation.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/events/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/events/add_signal.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/events/module_opening.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/events/rejectable.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/launcher_config.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/modules/module.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/properties/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/properties/auto.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/properties/throttled.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/scripting/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/scripting/script_context.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/scripting/script_runner.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/scripting/script_template.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/autosave.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/email.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/event_registry.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/file_dialog.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/hotkey_manager.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/link_manager.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/message_board.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/module_service.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/object_converter.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/project_updater.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/task_runner.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/theme_manager.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/services/tool_window_service.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/viewmanagers/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/viewmanagers/tool.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/bulk_value_selector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/check_box.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/code/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/code/code_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/code/python_syntax.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/combo_box.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/count_selector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/datetime.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/datetime_range_selector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/default_text_line_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/delegates.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/dtype_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/editable_combo_box.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/file_selector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/icon.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/icon_button.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/json_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/labelled.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/collabsible.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/group_box.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/group_panel.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/lines.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/layout/link.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/line_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/linkable.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/list_view.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/main_window.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/metadata_selector.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/modulewindow.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/legend_control.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/matplotlib/__init__.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/matplotlib/colorbar.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/matplotlib/colormap.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/matplotlib/font.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/plot_options.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/plot_toolbar_options.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/size.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/tool_type.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/plot/toolbar.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/popout.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/popup.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/property_tree.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/shrunk_push_button.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/steppable_combo_box.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/styleable.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/table.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/text_edit.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit/views/tool_window.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit.egg-info/SOURCES.txt +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit.egg-info/dependency_links.txt +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit.egg-info/requires.txt +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/pyqttoolkit.egg-info/top_level.txt +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/setup.cfg +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/setup.py +0 -0
- {pyqttoolkit-0.8.3 → pyqttoolkit-0.8.4}/versioneer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyqttoolkit
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: A toolkit for PyQt 5
|
|
5
5
|
Home-page: https://github.com/BitBloomTech/pyqttoolkit
|
|
6
6
|
Author: Bitbloom Ltd
|
|
@@ -12,6 +12,6 @@ Description: # PyQtToolkit
|
|
|
12
12
|
Platform: any
|
|
13
13
|
Requires-Python: >=3.6
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Provides-Extra: publish
|
|
16
15
|
Provides-Extra: ui
|
|
17
16
|
Provides-Extra: test
|
|
17
|
+
Provides-Extra: publish
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2026-05-
|
|
11
|
+
"date": "2026-05-26T12:07:12+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.8.
|
|
14
|
+
"full-revisionid": "77a7c47c6c4c8168010c762ac8e6bda38891aa10",
|
|
15
|
+
"version": "0.8.4"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
# along with this program; if not, write to the Free Software Foundation,
|
|
16
16
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
17
|
from io import BytesIO
|
|
18
|
+
import math
|
|
18
19
|
import numpy as np
|
|
19
20
|
from datetime import datetime
|
|
20
21
|
|
|
@@ -23,6 +24,7 @@ from PyQt5.QtWidgets import QVBoxLayout, QWidget, QMenu, QAction, QApplication
|
|
|
23
24
|
from PyQt5.QtGui import QKeySequence, QImage
|
|
24
25
|
|
|
25
26
|
import matplotlib
|
|
27
|
+
import matplotlib.dates as mdates
|
|
26
28
|
from matplotlib.legend import DraggableLegend
|
|
27
29
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
|
28
30
|
from matplotlib.figure import Figure
|
|
@@ -202,6 +204,7 @@ class MatPlotLibBase(QWidget):
|
|
|
202
204
|
self._setting_axis_limits = False
|
|
203
205
|
|
|
204
206
|
self.hasHiddenSeries = False
|
|
207
|
+
self._axes.grid(False)
|
|
205
208
|
|
|
206
209
|
enabledToolsChanged = pyqtSignal()
|
|
207
210
|
spanChanged = pyqtSignal(SpanModel)
|
|
@@ -868,23 +871,31 @@ class MatPlotLibBase(QWidget):
|
|
|
868
871
|
if not self.data:
|
|
869
872
|
return
|
|
870
873
|
if hasattr(self.data, 'x_labels'):
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
+
if len(self.data.x_labels) > 0 and all(isinstance(x, (np.datetime64, pd.Timestamp)) for x in self.data.x_labels):
|
|
875
|
+
x_labels = self.data.x_labels
|
|
876
|
+
self._update_date_xticks(x_labels)
|
|
877
|
+
x_ticks_rotation = 0.0
|
|
878
|
+
else:
|
|
879
|
+
step = self.data.x_tick_interval if hasattr(self.data, 'x_tick_interval') else None
|
|
880
|
+
x_ticks, x_labels, x_ticks_rotation = self._get_labels(self.data.x_labels, step, horizontal=True)
|
|
881
|
+
self._axes.set_xticks(x_ticks, x_labels)
|
|
874
882
|
if hasattr(self.data, 'x_ticks_rotation'):
|
|
875
883
|
rotation = x_ticks_rotation if np.isnan(self.data.x_ticks_rotation) else self.data.x_ticks_rotation
|
|
876
|
-
self._axes.
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
self._axes.set_xticklabels(x_labels)
|
|
884
|
+
self._axes.xaxis.set_tick_params(labelrotation=rotation)
|
|
885
|
+
matplotlib.artist.setp(self._axes.get_xticklabels(),
|
|
886
|
+
horizontalalignment='right' if rotation else 'center')
|
|
887
|
+
self._adjust_to_xticklabels_height(self._axes.get_xticklabels(), rotation)
|
|
881
888
|
|
|
882
889
|
if hasattr(self.data, 'y_labels'):
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
890
|
+
if len(self.data.y_labels) > 0 and all(isinstance(y, (np.datetime64, pd.Timestamp)) for y in self.data.y_labels):
|
|
891
|
+
y_labels = self.data.y_labels
|
|
892
|
+
self._update_date_yticks(y_labels)
|
|
893
|
+
else:
|
|
894
|
+
step = self.data.y_tick_interval if hasattr(self.data, 'y_tick_interval') else None
|
|
895
|
+
y_ticks, y_labels, _ = self._get_labels(self.data.y_labels, step, horizontal=False)
|
|
896
|
+
self._axes.set_yticks(y_ticks)
|
|
897
|
+
self._axes.set_yticklabels(y_labels)
|
|
898
|
+
self._adjust_to_yticklabels_width(y_labels)
|
|
888
899
|
|
|
889
900
|
def _adjust_to_yticklabels_width(self, labels):
|
|
890
901
|
sizes = self._divider.get_horizontal()
|
|
@@ -919,6 +930,52 @@ class MatPlotLibBase(QWidget):
|
|
|
919
930
|
sizes[0] = Size.Fixed(height / self._figure.dpi)
|
|
920
931
|
self._divider.set_vertical(sizes)
|
|
921
932
|
|
|
933
|
+
def _update_date_yticks(self, y_labels):
|
|
934
|
+
x_extent, y_extent = self._get_xy_extents()
|
|
935
|
+
ipositions, tick_formats, axis_label = self._determine_date_ticks(y_labels, self.axes.yaxis, self.data.yAxisTitle, y_extent)
|
|
936
|
+
self._axes.set_yticks(ipositions, tick_formats)
|
|
937
|
+
self._axes.set_ylabel(axis_label)
|
|
938
|
+
self._adjust_to_yticklabels_width(tick_formats)
|
|
939
|
+
|
|
940
|
+
def _update_date_xticks(self, x_labels):
|
|
941
|
+
x_extent, y_extent = self._get_xy_extents()
|
|
942
|
+
ipositions, tick_formats, axis_label = self._determine_date_ticks(x_labels, self.axes.xaxis, self.data.xAxisTitle, x_extent)
|
|
943
|
+
self._axes.set_xticks(ipositions, tick_formats)
|
|
944
|
+
self._axes.set_xlabel(axis_label)
|
|
945
|
+
|
|
946
|
+
def _determine_date_ticks(self, labels, axis_obj, axis_title, extent):
|
|
947
|
+
e0, e1 = extent
|
|
948
|
+
imin, imax = max(0, math.floor(e0)), min(math.ceil(e1), len(labels) - 1)
|
|
949
|
+
# Convert all labels to date numbers for robust min/max handling
|
|
950
|
+
label_dates = [mdates.date2num(lbl) for lbl in labels]
|
|
951
|
+
date_num_min = min(label_dates)
|
|
952
|
+
date_num_max = max(label_dates)
|
|
953
|
+
|
|
954
|
+
locator = mdates.AutoDateLocator(maxticks=max(1, min(imax - imin, 25)))
|
|
955
|
+
offset_formats = ['', '%Y', '%Y-%b', '%Y-%b', '%Y-%m-%d', '%Y-%m-%d']
|
|
956
|
+
formatter = mdates.ConciseDateFormatter(locator,
|
|
957
|
+
offset_formats=offset_formats)
|
|
958
|
+
|
|
959
|
+
if date_num_max == date_num_min:
|
|
960
|
+
tick_vals = np.array([date_num_min])
|
|
961
|
+
ipositions = np.array([(imin + imax) / 2.0])
|
|
962
|
+
tick_formats = formatter.format_ticks(tick_vals)
|
|
963
|
+
axis_label = f'{axis_title} ({formatter.get_offset()})' if formatter.get_offset() else axis_title
|
|
964
|
+
return ipositions, tick_formats, axis_label
|
|
965
|
+
|
|
966
|
+
# Ensure correct order for tick_values
|
|
967
|
+
if label_dates[imin] <= label_dates[imax]:
|
|
968
|
+
tick_vals = locator.tick_values(labels[imin], labels[imax])
|
|
969
|
+
ipositions = (len(labels) - 1) * (tick_vals - date_num_min) / (date_num_max - date_num_min) - 0.5
|
|
970
|
+
else:
|
|
971
|
+
tick_vals = locator.tick_values(labels[imax], labels[imin])
|
|
972
|
+
ipositions = (len(labels) - 1) * (tick_vals[::-1] - date_num_min) / (date_num_max - date_num_min) - 0.5
|
|
973
|
+
|
|
974
|
+
tick_formats = formatter.format_ticks(tick_vals)
|
|
975
|
+
axis_label = f'{axis_title} ({formatter.get_offset()})' if formatter.get_offset() else axis_title
|
|
976
|
+
return ipositions, tick_formats, axis_label
|
|
977
|
+
|
|
978
|
+
|
|
922
979
|
def _get_labels(self, labels, step, horizontal=True):
|
|
923
980
|
(x0, x1), (y0, y1) = self._get_xy_extents()
|
|
924
981
|
start, end = (int(x0), int(x1)) if horizontal else (int(y0), int(y1))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyqttoolkit
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: A toolkit for PyQt 5
|
|
5
5
|
Home-page: https://github.com/BitBloomTech/pyqttoolkit
|
|
6
6
|
Author: Bitbloom Ltd
|
|
@@ -12,6 +12,6 @@ Description: # PyQtToolkit
|
|
|
12
12
|
Platform: any
|
|
13
13
|
Requires-Python: >=3.6
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Provides-Extra: publish
|
|
16
15
|
Provides-Extra: ui
|
|
17
16
|
Provides-Extra: test
|
|
17
|
+
Provides-Extra: publish
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|