pyobs-gui 2.0.0.dev12__tar.gz → 2.0.0.dev13__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.
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/PKG-INFO +1 -1
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/spectrographwidget.ui +22 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/spectrographwidget_ui.py +22 -2
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/spectrographwidget.py +18 -1
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/weatherwidget.py +4 -4
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyproject.toml +1 -1
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/tests/test_camerawidget.py +1 -1
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/uv.lock +1 -1
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.claude/skills/verify/SKILL.md +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.github/dependabot.yml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.github/workflows/pypi.yml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.github/workflows/pyrefly.yml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.github/workflows/ruff.yml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.gitignore +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.pre-commit-config.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/.readthedocs.yml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/CHANGELOG.rst +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/LICENSE +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/README.md +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/bin/mypyuic5 +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/Makefile +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/make.bat +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/requirements.txt +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/source/_static/pyobs.gif +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/source/conf.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/docs/source/index.rst +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/mypy.ini +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/__main__.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/_nuitka_astropy_patch.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/accounts.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/acquisitionwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/autofocuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/autoguidingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/base.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/camerawidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/commandinputwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/coolingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/datadisplaywidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/eventswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/filterwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/fitsheaderswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/focuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/gui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/login.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/loginwindow.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/logmodel.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/mainwindow.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/modewidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/modifiedmixin.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/modulegui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/acquisitionwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/acquisitionwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/autofocuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/autofocuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/autoguidingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/autoguidingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/camerawidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/camerawidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/compassmoveplugin.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/compassmovewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/compassmovewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/compile.sh +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/coolingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/coolingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/datadisplayplugin.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/datadisplaywidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/datadisplaywidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/designer.sh +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/eventswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/eventswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/filterwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/filterwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/fitsheaderswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/fitsheaderswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/focuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/focuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/mainwindow.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/mainwindow_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/modewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/modewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-alt-circle-down-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-alt-circle-left-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-alt-circle-right-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-up-right-from-square-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/chart-line-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/circle-question-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/cloud-sun-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/edit-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/search-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/undo-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources.qrc +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources_rc.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/roofwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/roofwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/shellwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/shellwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/telescopewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/telescopewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/temperaturesplotwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/temperaturesplotwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/temperatureswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/temperatureswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/videowidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/videowidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/weatherwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/weatherwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/roofwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/shellwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/statuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/telescopewidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/temperaturesplotwidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/temperatureswidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/utils.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/videowidget.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/watchedlabel.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/specs/README.md +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/spike_standalone/main.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/spike_standalone/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/acquisition.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/autofocus.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/camera.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/full.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/guiding.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/mode.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/roof.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/spectrograph.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/telescope.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/telescope_acl.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/telescope_acl_denied.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/test/video.yaml +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/tests/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/tests/conftest.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/tests/test_accounts.py +0 -0
- {pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/tests/test_loginwindow.py +0 -0
|
@@ -66,6 +66,27 @@
|
|
|
66
66
|
</property>
|
|
67
67
|
</widget>
|
|
68
68
|
</item>
|
|
69
|
+
<item>
|
|
70
|
+
<layout class="QHBoxLayout" name="horizontalLayoutCount">
|
|
71
|
+
<item>
|
|
72
|
+
<widget class="QLabel" name="labelCount">
|
|
73
|
+
<property name="text">
|
|
74
|
+
<string>Count:</string>
|
|
75
|
+
</property>
|
|
76
|
+
</widget>
|
|
77
|
+
</item>
|
|
78
|
+
<item>
|
|
79
|
+
<widget class="QSpinBox" name="spinCount">
|
|
80
|
+
<property name="minimum">
|
|
81
|
+
<number>1</number>
|
|
82
|
+
</property>
|
|
83
|
+
<property name="maximum">
|
|
84
|
+
<number>9999</number>
|
|
85
|
+
</property>
|
|
86
|
+
</widget>
|
|
87
|
+
</item>
|
|
88
|
+
</layout>
|
|
89
|
+
</item>
|
|
69
90
|
<item>
|
|
70
91
|
<widget class="QPushButton" name="butExpose">
|
|
71
92
|
<property name="palette">
|
|
@@ -1035,6 +1056,7 @@
|
|
|
1035
1056
|
<tabstops>
|
|
1036
1057
|
<tabstop>scrollArea</tabstop>
|
|
1037
1058
|
<tabstop>checkBroadcast</tabstop>
|
|
1059
|
+
<tabstop>spinCount</tabstop>
|
|
1038
1060
|
<tabstop>butExpose</tabstop>
|
|
1039
1061
|
<tabstop>butAbort</tabstop>
|
|
1040
1062
|
</tabstops>
|
|
@@ -17,7 +17,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
|
|
17
17
|
QPalette, QPixmap, QRadialGradient, QTransform)
|
|
18
18
|
from PySide6.QtWidgets import (QApplication, QCheckBox, QGroupBox, QHBoxLayout,
|
|
19
19
|
QLabel, QProgressBar, QPushButton, QScrollArea,
|
|
20
|
-
QSizePolicy, QSpacerItem, QVBoxLayout,
|
|
20
|
+
QSizePolicy, QSpacerItem, QSpinBox, QVBoxLayout,
|
|
21
|
+
QWidget)
|
|
21
22
|
|
|
22
23
|
from ..datadisplaywidget import DataDisplayWidget
|
|
23
24
|
from . import resources_rc
|
|
@@ -60,6 +61,23 @@ class Ui_SpectrographWidget(object):
|
|
|
60
61
|
|
|
61
62
|
self.verticalLayout_3.addWidget(self.checkBroadcast)
|
|
62
63
|
|
|
64
|
+
self.horizontalLayoutCount = QHBoxLayout()
|
|
65
|
+
self.horizontalLayoutCount.setObjectName(u"horizontalLayoutCount")
|
|
66
|
+
self.labelCount = QLabel(self.groupExposure)
|
|
67
|
+
self.labelCount.setObjectName(u"labelCount")
|
|
68
|
+
|
|
69
|
+
self.horizontalLayoutCount.addWidget(self.labelCount)
|
|
70
|
+
|
|
71
|
+
self.spinCount = QSpinBox(self.groupExposure)
|
|
72
|
+
self.spinCount.setObjectName(u"spinCount")
|
|
73
|
+
self.spinCount.setMinimum(1)
|
|
74
|
+
self.spinCount.setMaximum(9999)
|
|
75
|
+
|
|
76
|
+
self.horizontalLayoutCount.addWidget(self.spinCount)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
self.verticalLayout_3.addLayout(self.horizontalLayoutCount)
|
|
80
|
+
|
|
63
81
|
self.butExpose = QPushButton(self.groupExposure)
|
|
64
82
|
self.butExpose.setObjectName(u"butExpose")
|
|
65
83
|
palette = QPalette()
|
|
@@ -265,7 +283,8 @@ class Ui_SpectrographWidget(object):
|
|
|
265
283
|
|
|
266
284
|
self.horizontalLayout_2.setStretch(1, 1)
|
|
267
285
|
QWidget.setTabOrder(self.scrollArea, self.checkBroadcast)
|
|
268
|
-
QWidget.setTabOrder(self.checkBroadcast, self.
|
|
286
|
+
QWidget.setTabOrder(self.checkBroadcast, self.spinCount)
|
|
287
|
+
QWidget.setTabOrder(self.spinCount, self.butExpose)
|
|
269
288
|
QWidget.setTabOrder(self.butExpose, self.butAbort)
|
|
270
289
|
|
|
271
290
|
self.retranslateUi(SpectrographWidget)
|
|
@@ -277,6 +296,7 @@ class Ui_SpectrographWidget(object):
|
|
|
277
296
|
SpectrographWidget.setWindowTitle(QCoreApplication.translate("SpectrographWidget", u"Form", None))
|
|
278
297
|
self.groupExposure.setTitle(QCoreApplication.translate("SpectrographWidget", u"Exposure", None))
|
|
279
298
|
self.checkBroadcast.setText(QCoreApplication.translate("SpectrographWidget", u"Broadcast", None))
|
|
299
|
+
self.labelCount.setText(QCoreApplication.translate("SpectrographWidget", u"Count:", None))
|
|
280
300
|
self.butExpose.setText(QCoreApplication.translate("SpectrographWidget", u"Expose", None))
|
|
281
301
|
self.butAbort.setText(QCoreApplication.translate("SpectrographWidget", u"Abort", None))
|
|
282
302
|
self.labelStatus.setText(QCoreApplication.translate("SpectrographWidget", u"IDLE", None))
|
|
@@ -29,6 +29,7 @@ class SpectrographWidget(BaseWidget, Ui_SpectrographWidget):
|
|
|
29
29
|
|
|
30
30
|
# cached state
|
|
31
31
|
self.exposure_status = ExposureStatus.IDLE
|
|
32
|
+
self.exposures_left = 0
|
|
32
33
|
|
|
33
34
|
# before first update, disable myself
|
|
34
35
|
self.setEnabled(False)
|
|
@@ -61,11 +62,20 @@ class SpectrographWidget(BaseWidget, Ui_SpectrographWidget):
|
|
|
61
62
|
@qasync.asyncSlot() # type: ignore
|
|
62
63
|
async def grab_spectrum(self) -> None:
|
|
63
64
|
broadcast = self.checkBroadcast.isChecked()
|
|
64
|
-
|
|
65
|
+
|
|
66
|
+
# take the requested number of spectra; an exception (e.g. from a failed exposure,
|
|
67
|
+
# or abort() zeroing exposures_left mid-loop) stops the sequence
|
|
68
|
+
self.exposures_left = self.spinCount.value()
|
|
65
69
|
self.signal_update_gui.emit()
|
|
70
|
+
while self.exposures_left > 0:
|
|
71
|
+
await self.datadisplay.grab_data(broadcast)
|
|
72
|
+
self.exposures_left -= 1
|
|
73
|
+
self.signal_update_gui.emit()
|
|
66
74
|
|
|
67
75
|
@qasync.asyncSlot() # type: ignore
|
|
68
76
|
async def abort(self) -> None:
|
|
77
|
+
# stop the sequence after the current spectrum finishes aborting
|
|
78
|
+
self.exposures_left = 0
|
|
69
79
|
async with self.comm.proxy(self.module, IAbortable) as proxy:
|
|
70
80
|
await proxy.abort()
|
|
71
81
|
|
|
@@ -75,6 +85,13 @@ class SpectrographWidget(BaseWidget, Ui_SpectrographWidget):
|
|
|
75
85
|
self.butExpose.setEnabled(self.exposure_status == ExposureStatus.IDLE)
|
|
76
86
|
self.butAbort.setEnabled(self.exposure_status != ExposureStatus.IDLE)
|
|
77
87
|
|
|
88
|
+
self.butAbort.setText("Abort sequence" if self.exposures_left > 1 else "Abort")
|
|
89
|
+
|
|
90
|
+
if self.exposures_left > 0:
|
|
91
|
+
self.labelExposuresLeft.setText(f"{self.exposures_left} spectrum/spectra left")
|
|
92
|
+
else:
|
|
93
|
+
self.labelExposuresLeft.setText("")
|
|
94
|
+
|
|
78
95
|
msg = ""
|
|
79
96
|
if self.exposure_status == ExposureStatus.IDLE:
|
|
80
97
|
self.progressExposure.setValue(0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from collections import deque
|
|
3
|
-
from typing import Any, Deque, Dict, Tuple, TYPE_CHECKING
|
|
3
|
+
from typing import Any, cast, Deque, Dict, Tuple, TYPE_CHECKING
|
|
4
4
|
from PySide6 import QtWidgets, QtGui, QtCore # type: ignore
|
|
5
5
|
import logging
|
|
6
6
|
|
|
@@ -16,6 +16,7 @@ from .base import BaseWidget
|
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
18
18
|
from pyobs.utils.time import Time
|
|
19
|
+
from matplotlib.axes import Axes
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
log = logging.getLogger(__name__)
|
|
@@ -186,9 +187,8 @@ class WeatherWidget(BaseWidget, Ui_WeatherWidget):
|
|
|
186
187
|
self.canvas.draw()
|
|
187
188
|
return
|
|
188
189
|
|
|
189
|
-
|
|
190
|
-
if len(sensors) == 1
|
|
191
|
-
axes = [axes]
|
|
190
|
+
subplots = self.figure.subplots(len(sensors), 1, sharex=True)
|
|
191
|
+
axes = cast("list[Axes]", [subplots] if len(sensors) == 1 else list(subplots))
|
|
192
192
|
for ax, sensor in zip(axes, sensors, strict=True):
|
|
193
193
|
times, values = zip(*self._history[sensor], strict=True)
|
|
194
194
|
ax.plot([t.to_datetime() for t in times], values, color="tab:blue")
|
|
@@ -35,7 +35,7 @@ class FakeComm:
|
|
|
35
35
|
def make_widget(data_sequence_proxy) -> CameraWidget:
|
|
36
36
|
widget = CameraWidget()
|
|
37
37
|
widget.modules = ["camera"]
|
|
38
|
-
widget._comm = FakeComm(data_sequence_proxy=data_sequence_proxy)
|
|
38
|
+
widget._comm = FakeComm(data_sequence_proxy=data_sequence_proxy) # pyrefly: ignore [bad-assignment]
|
|
39
39
|
widget.datadisplay.grab_data = AsyncMock()
|
|
40
40
|
return widget
|
|
41
41
|
|
|
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
|
{pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev12 → pyobs_gui-2.0.0.dev13}/pyobs_gui/qt/resources/circle-question-solid.svg
RENAMED
|
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
|