pyobs-gui 2.0.0.dev20__tar.gz → 2.0.0.dev22__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.dev22/.github/workflows/dependabot-automerge.yml +24 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/PKG-INFO +1 -1
- pyobs_gui-2.0.0.dev22/README.md +28 -0
- pyobs_gui-2.0.0.dev22/docs/source/index.rst +140 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyproject.toml +3 -3
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/uv.lock +73 -38
- pyobs_gui-2.0.0.dev20/README.md +0 -3
- pyobs_gui-2.0.0.dev20/docs/source/index.rst +0 -51
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.claude/skills/verify/SKILL.md +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.github/dependabot.yml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.github/workflows/pypi.yml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.github/workflows/pyrefly.yml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.github/workflows/ruff.yml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.gitignore +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.pre-commit-config.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/.readthedocs.yml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/CHANGELOG.rst +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/LICENSE +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/bin/mypyuic5 +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/docs/Makefile +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/docs/make.bat +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/docs/requirements.txt +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/docs/source/_static/pyobs.gif +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/docs/source/conf.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/mypy.ini +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/__main__.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/_nuitka_astropy_patch.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/accounts.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/acquisitionwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/autofocuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/autoguidingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/base.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/camerawidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/commandinputwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/coolingwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/datadisplaywidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/eventswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/filterwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/fitsheaderswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/focuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/gui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/login.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/loginwindow.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/logmodel.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/mainwindow.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/modewidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/modifiedmixin.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/modulegui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/acquisitionwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/acquisitionwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/autofocuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/autofocuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/autoguidingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/autoguidingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/camerawidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/camerawidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/compassmoveplugin.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/compassmovewidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/compassmovewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/compassmovewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/compile.sh +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/coolingwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/coolingwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/datadisplayplugin.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/datadisplaywidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/datadisplaywidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/designer.sh +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/eventswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/eventswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/filterwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/filterwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/fitsheaderswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/fitsheaderswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/focuswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/focuswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/mainwindow.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/mainwindow_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/modewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/modewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-alt-circle-down-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-alt-circle-left-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-alt-circle-right-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-up-right-from-square-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/chart-line-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/circle-question-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/cloud-sun-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/edit-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/search-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/undo-solid.svg +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources.qrc +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources_rc.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/roofwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/roofwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/shellwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/shellwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/spectrographwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/spectrographwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/telescopewidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/telescopewidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/temperaturesplotwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/temperaturesplotwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/temperatureswidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/temperatureswidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/videowidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/videowidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/weatherwidget.ui +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/weatherwidget_ui.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/roofwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/shellwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/spectrographwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/statuswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/telescopewidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/temperaturesplotwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/temperatureswidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/utils.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/videowidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/watchedlabel.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/weatherwidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/specs/2026-08-20-gui-remote-call-error-handling.md +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/specs/2026-08-21-gui-widget-startup-responsiveness.md +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/specs/index.md +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/spike_standalone/main.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/spike_standalone/pysidedeploy.spec +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/acquisition.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/autofocus.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/camera.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/full.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/guiding.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/mode.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/roof.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/spectrograph.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/telescope.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/telescope_acl.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/telescope_acl_denied.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/test/video.yaml +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/__init__.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/conftest.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/test_accounts.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/test_camerawidget.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/test_loginwindow.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/test_mainwindow_startup.py +0 -0
- {pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/tests/test_videowidget.py +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Dependabot auto-merge
|
|
2
|
+
|
|
3
|
+
on: pull_request
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: write
|
|
7
|
+
pull-requests: write
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
dependabot:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}
|
|
13
|
+
steps:
|
|
14
|
+
- name: Fetch Dependabot metadata
|
|
15
|
+
id: metadata
|
|
16
|
+
uses: dependabot/fetch-metadata@v2
|
|
17
|
+
with:
|
|
18
|
+
compat-lookup: true
|
|
19
|
+
- name: Enable auto-merge for patch and minor updates
|
|
20
|
+
if: ${{ steps.metadata.outputs.update-type == 'version-update:semver-patch' || steps.metadata.outputs.update-type == 'version-update:semver-minor' }}
|
|
21
|
+
run: gh pr merge --auto --merge "$PR_URL"
|
|
22
|
+
env:
|
|
23
|
+
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
24
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
pyobs-gui
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
This is a [pyobs](https://www.pyobs.org) GUI for operating the whole system: one page per
|
|
5
|
+
connected module (camera, telescope, roof, focuser, ...), plus Shell/Events/Status tool pages.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Install *pyobs-gui*
|
|
9
|
+
---------------------
|
|
10
|
+
Clone the repository:
|
|
11
|
+
|
|
12
|
+
git clone https://github.com/pyobs/pyobs-gui.git
|
|
13
|
+
cd pyobs-gui
|
|
14
|
+
|
|
15
|
+
Install it with [uv](https://docs.astral.sh/uv/):
|
|
16
|
+
|
|
17
|
+
uv sync
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
Running
|
|
21
|
+
-------
|
|
22
|
+
Two ways to start it:
|
|
23
|
+
|
|
24
|
+
- `uv run pyobs-gui` — standalone, interactive login. No YAML config needed; it prompts for XMPP
|
|
25
|
+
credentials (with an optional "store password") and connects directly.
|
|
26
|
+
- `uv run pyobs <config.yaml>` — the standard `pyobs` CLI, driven by a config file whose top-level
|
|
27
|
+
class is `pyobs_gui.GUI` (see `docs/source/index.rst` for a full example, including how to wire
|
|
28
|
+
in a custom widget for a module).
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
pyobs-gui
|
|
2
|
+
#########
|
|
3
|
+
|
|
4
|
+
This is a `pyobs <https://www.pyobs.org>`_ (`documentation <https://docs.pyobs.org>`_) module providing a GUI
|
|
5
|
+
for operating the whole system.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Example configuration
|
|
9
|
+
**********************
|
|
10
|
+
|
|
11
|
+
This is an example configuration for a GUI that defines one custom widget for the ``guiding`` module::
|
|
12
|
+
|
|
13
|
+
class: pyobs_gui.GUI
|
|
14
|
+
|
|
15
|
+
widgets:
|
|
16
|
+
- module: guiding
|
|
17
|
+
overwrite: True
|
|
18
|
+
widget:
|
|
19
|
+
class: mypackage.GuidingWidget
|
|
20
|
+
|
|
21
|
+
comm:
|
|
22
|
+
jid: test@example.com
|
|
23
|
+
password: ***
|
|
24
|
+
|
|
25
|
+
timezone: Europe/Berlin
|
|
26
|
+
location:
|
|
27
|
+
longitude: 9.944333
|
|
28
|
+
latitude: 51.560583
|
|
29
|
+
elevation: 201.
|
|
30
|
+
|
|
31
|
+
vfs:
|
|
32
|
+
class: pyobs.vfs.VirtualFileSystem
|
|
33
|
+
roots:
|
|
34
|
+
cache:
|
|
35
|
+
class: pyobs.vfs.HttpFile
|
|
36
|
+
download: http://localhost:37075/
|
|
37
|
+
webcam:
|
|
38
|
+
class: pyobs.vfs.HttpFile
|
|
39
|
+
download: http://localhost:37077/
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
Available classes
|
|
43
|
+
******************
|
|
44
|
+
|
|
45
|
+
There is one single class for the GUI.
|
|
46
|
+
|
|
47
|
+
GUI
|
|
48
|
+
===
|
|
49
|
+
.. autoclass:: pyobs_gui.GUI
|
|
50
|
+
:members:
|
|
51
|
+
:show-inheritance:
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
Widgets
|
|
55
|
+
*******
|
|
56
|
+
|
|
57
|
+
The GUI shows one page per connected module, picking a widget by the module's interfaces
|
|
58
|
+
(``DEFAULT_WIDGETS`` in ``mainwindow.py``), plus three always-present "Tools" pages. No screenshots
|
|
59
|
+
yet — this section was written from source, not from a running GUI; add screenshots as a follow-up.
|
|
60
|
+
|
|
61
|
+
Shell
|
|
62
|
+
=====
|
|
63
|
+
Always present. A command console: type shell-like commands against any connected module, with
|
|
64
|
+
tab-completion driven by the module's own docstrings, and a per-module command history.
|
|
65
|
+
|
|
66
|
+
Events
|
|
67
|
+
======
|
|
68
|
+
Always present. Live feed of events broadcast by connected modules, and lets you send one back.
|
|
69
|
+
|
|
70
|
+
Status
|
|
71
|
+
======
|
|
72
|
+
Always present. Per-module connection/presence indicator plus a live, expandable tree of each
|
|
73
|
+
connected module's published state.
|
|
74
|
+
|
|
75
|
+
Camera — drives ``ICamera``
|
|
76
|
+
============================
|
|
77
|
+
Expose/abort control: binning, gain, image format/type, exposure time, full-frame vs. windowed
|
|
78
|
+
readout, and (if the module supports it) data sequences.
|
|
79
|
+
|
|
80
|
+
Telescope — drives ``ITelescope``
|
|
81
|
+
====================================
|
|
82
|
+
Init/park/stop and move-to-target, offsets in both RA/Dec and Alt/Az, Simbad and JPL Horizons
|
|
83
|
+
target lookup, and tracking of orbital elements or solar-system bodies.
|
|
84
|
+
|
|
85
|
+
Roof — drives ``IRoof``
|
|
86
|
+
==========================
|
|
87
|
+
Open/close/stop the roof, with live motion and pointing state.
|
|
88
|
+
|
|
89
|
+
Focuser — drives ``IFocuser``
|
|
90
|
+
================================
|
|
91
|
+
Set an absolute focus value, apply/reset a focus offset.
|
|
92
|
+
|
|
93
|
+
Auto Focus — drives ``IAutoFocus``
|
|
94
|
+
=====================================
|
|
95
|
+
Run or abort an autofocus sequence.
|
|
96
|
+
|
|
97
|
+
Acquisition — drives ``IAcquisition``
|
|
98
|
+
========================================
|
|
99
|
+
Acquire a target, abort an in-progress acquisition.
|
|
100
|
+
|
|
101
|
+
Auto Guiding — drives ``IAutoGuiding``
|
|
102
|
+
=========================================
|
|
103
|
+
Start/stop guiding and set the guide-exposure time.
|
|
104
|
+
|
|
105
|
+
Weather — drives ``IWeather``
|
|
106
|
+
================================
|
|
107
|
+
Live sensor values plus a history plot.
|
|
108
|
+
|
|
109
|
+
Video — drives ``IVideo``
|
|
110
|
+
============================
|
|
111
|
+
Live view (MJPEG/raw stream), grab a still, adjust exposure time/gain/image type.
|
|
112
|
+
|
|
113
|
+
Spectrograph — drives ``ISpectrograph``
|
|
114
|
+
==========================================
|
|
115
|
+
Grab a spectrum, abort an in-progress exposure.
|
|
116
|
+
|
|
117
|
+
Filter wheel — drives ``IFilters``
|
|
118
|
+
=====================================
|
|
119
|
+
Set the active filter.
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
Keyboard shortcuts
|
|
123
|
+
*******************
|
|
124
|
+
|
|
125
|
+
Global, not per-widget — bound with the ``Ctrl``/``Ctrl+Alt`` modifier specifically so no
|
|
126
|
+
text/numeric-entry widget can mistake one for ordinary input.
|
|
127
|
+
|
|
128
|
+
=============== ==========================================================
|
|
129
|
+
Shortcut Action
|
|
130
|
+
=============== ==========================================================
|
|
131
|
+
``Ctrl+1`` Switch to Shell (fixed)
|
|
132
|
+
``Ctrl+2`` Switch to Events (fixed)
|
|
133
|
+
``Ctrl+3`` Switch to Status (fixed)
|
|
134
|
+
``Ctrl+4``..``Ctrl+9``, ``Ctrl+0``
|
|
135
|
+
Switch to whichever module page is bound to that slot
|
|
136
|
+
(no-op if unbound or that module isn't connected)
|
|
137
|
+
``Ctrl+Alt+4``..``Ctrl+Alt+9``, ``Ctrl+Alt+0``
|
|
138
|
+
Bind the currently selected page to that slot, overwriting
|
|
139
|
+
any previous binding
|
|
140
|
+
=============== ==========================================================
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pyobs-gui"
|
|
3
|
-
version = "2.0.0.
|
|
3
|
+
version = "2.0.0.dev22"
|
|
4
4
|
description = "A remote GUI for pyobs"
|
|
5
5
|
authors = [{ name = "Tim-Oliver Husser", email = "thusser@uni-goettingen.de" }]
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -32,8 +32,8 @@ dev = [
|
|
|
32
32
|
"pandas-stubs>=2.3.0.250703",
|
|
33
33
|
"pre-commit>=4.2.0,<5",
|
|
34
34
|
"pyside6-stubs>=6.7.3.0",
|
|
35
|
-
"sphinx-rtd-theme>=3.0.2
|
|
36
|
-
"Sphinx>=8.2.3
|
|
35
|
+
"sphinx-rtd-theme>=3.0.2",
|
|
36
|
+
"Sphinx>=8.2.3",
|
|
37
37
|
"types-defusedxml>=0.7.0.20250708",
|
|
38
38
|
"types-python-dateutil>=2.9.0.20250708",
|
|
39
39
|
"pytest>=9.1.1",
|
|
@@ -3295,7 +3295,7 @@ wheels = [
|
|
|
3295
3295
|
|
|
3296
3296
|
[[package]]
|
|
3297
3297
|
name = "pyobs-gui"
|
|
3298
|
-
version = "2.0.0.
|
|
3298
|
+
version = "2.0.0.dev22"
|
|
3299
3299
|
source = { editable = "." }
|
|
3300
3300
|
dependencies = [
|
|
3301
3301
|
{ name = "astroplan" },
|
|
@@ -3325,7 +3325,8 @@ dev = [
|
|
|
3325
3325
|
{ name = "pytest-asyncio" },
|
|
3326
3326
|
{ name = "pytest-mock" },
|
|
3327
3327
|
{ name = "ruff" },
|
|
3328
|
-
{ name = "sphinx" },
|
|
3328
|
+
{ name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
|
3329
|
+
{ name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
|
3329
3330
|
{ name = "sphinx-rtd-theme" },
|
|
3330
3331
|
{ name = "types-defusedxml" },
|
|
3331
3332
|
{ name = "types-python-dateutil" },
|
|
@@ -3359,8 +3360,8 @@ dev = [
|
|
|
3359
3360
|
{ name = "pytest-asyncio", specifier = ">=1.4.0" },
|
|
3360
3361
|
{ name = "pytest-mock", specifier = ">=3.15.1" },
|
|
3361
3362
|
{ name = "ruff", specifier = ">=0.11.0" },
|
|
3362
|
-
{ name = "sphinx", specifier = ">=8.2.3
|
|
3363
|
-
{ name = "sphinx-rtd-theme", specifier = ">=3.0.2
|
|
3363
|
+
{ name = "sphinx", specifier = ">=8.2.3" },
|
|
3364
|
+
{ name = "sphinx-rtd-theme", specifier = ">=3.0.2" },
|
|
3364
3365
|
{ name = "types-defusedxml", specifier = ">=0.7.0.20250708" },
|
|
3365
3366
|
{ name = "types-python-dateutil", specifier = ">=2.9.0.20250708" },
|
|
3366
3367
|
]
|
|
@@ -3778,18 +3779,6 @@ wheels = [
|
|
|
3778
3779
|
{ url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" },
|
|
3779
3780
|
]
|
|
3780
3781
|
|
|
3781
|
-
[[package]]
|
|
3782
|
-
name = "roman-numerals-py"
|
|
3783
|
-
version = "4.1.0"
|
|
3784
|
-
source = { registry = "https://pypi.org/simple" }
|
|
3785
|
-
dependencies = [
|
|
3786
|
-
{ name = "roman-numerals" },
|
|
3787
|
-
]
|
|
3788
|
-
sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/de96fca640f4f656eb79bbee0e79aeec52e3e0e359f8a3e6a0d366378b64/roman_numerals_py-4.1.0.tar.gz", hash = "sha256:f5d7b2b4ca52dd855ef7ab8eb3590f428c0b1ea480736ce32b01fef2a5f8daf9", size = 4274, upload-time = "2025-12-17T18:25:41.153Z" }
|
|
3789
|
-
wheels = [
|
|
3790
|
-
{ url = "https://files.pythonhosted.org/packages/27/2c/daca29684cbe9fd4bc711f8246da3c10adca1ccc4d24436b17572eb2590e/roman_numerals_py-4.1.0-py3-none-any.whl", hash = "sha256:553114c1167141c1283a51743759723ecd05604a1b6b507225e91dc1a6df0780", size = 4547, upload-time = "2025-12-17T18:25:40.136Z" },
|
|
3791
|
-
]
|
|
3792
|
-
|
|
3793
3782
|
[[package]]
|
|
3794
3783
|
name = "ruff"
|
|
3795
3784
|
version = "0.16.2"
|
|
@@ -4132,30 +4121,74 @@ wheels = [
|
|
|
4132
4121
|
|
|
4133
4122
|
[[package]]
|
|
4134
4123
|
name = "sphinx"
|
|
4135
|
-
version = "
|
|
4124
|
+
version = "9.0.4"
|
|
4136
4125
|
source = { registry = "https://pypi.org/simple" }
|
|
4126
|
+
resolution-markers = [
|
|
4127
|
+
"python_full_version < '3.12' and sys_platform == 'win32'",
|
|
4128
|
+
"python_full_version < '3.12' and sys_platform == 'emscripten'",
|
|
4129
|
+
"python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
|
4130
|
+
]
|
|
4137
4131
|
dependencies = [
|
|
4138
|
-
{ name = "alabaster" },
|
|
4139
|
-
{ name = "babel" },
|
|
4140
|
-
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
4141
|
-
{ name = "docutils" },
|
|
4142
|
-
{ name = "imagesize" },
|
|
4143
|
-
{ name = "jinja2" },
|
|
4144
|
-
{ name = "packaging" },
|
|
4145
|
-
{ name = "pygments" },
|
|
4146
|
-
{ name = "requests" },
|
|
4147
|
-
{ name = "roman-numerals
|
|
4148
|
-
{ name = "snowballstemmer" },
|
|
4149
|
-
{ name = "sphinxcontrib-applehelp" },
|
|
4150
|
-
{ name = "sphinxcontrib-devhelp" },
|
|
4151
|
-
{ name = "sphinxcontrib-htmlhelp" },
|
|
4152
|
-
{ name = "sphinxcontrib-jsmath" },
|
|
4153
|
-
{ name = "sphinxcontrib-qthelp" },
|
|
4154
|
-
{ name = "sphinxcontrib-serializinghtml" },
|
|
4132
|
+
{ name = "alabaster", marker = "python_full_version < '3.12'" },
|
|
4133
|
+
{ name = "babel", marker = "python_full_version < '3.12'" },
|
|
4134
|
+
{ name = "colorama", marker = "python_full_version < '3.12' and sys_platform == 'win32'" },
|
|
4135
|
+
{ name = "docutils", marker = "python_full_version < '3.12'" },
|
|
4136
|
+
{ name = "imagesize", marker = "python_full_version < '3.12'" },
|
|
4137
|
+
{ name = "jinja2", marker = "python_full_version < '3.12'" },
|
|
4138
|
+
{ name = "packaging", marker = "python_full_version < '3.12'" },
|
|
4139
|
+
{ name = "pygments", marker = "python_full_version < '3.12'" },
|
|
4140
|
+
{ name = "requests", marker = "python_full_version < '3.12'" },
|
|
4141
|
+
{ name = "roman-numerals", marker = "python_full_version < '3.12'" },
|
|
4142
|
+
{ name = "snowballstemmer", marker = "python_full_version < '3.12'" },
|
|
4143
|
+
{ name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.12'" },
|
|
4144
|
+
{ name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.12'" },
|
|
4145
|
+
{ name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.12'" },
|
|
4146
|
+
{ name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.12'" },
|
|
4147
|
+
{ name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.12'" },
|
|
4148
|
+
{ name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.12'" },
|
|
4149
|
+
]
|
|
4150
|
+
sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" }
|
|
4151
|
+
wheels = [
|
|
4152
|
+
{ url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713, upload-time = "2025-12-04T07:45:24.944Z" },
|
|
4153
|
+
]
|
|
4154
|
+
|
|
4155
|
+
[[package]]
|
|
4156
|
+
name = "sphinx"
|
|
4157
|
+
version = "9.1.0"
|
|
4158
|
+
source = { registry = "https://pypi.org/simple" }
|
|
4159
|
+
resolution-markers = [
|
|
4160
|
+
"python_full_version == '3.14.*' and sys_platform == 'win32'",
|
|
4161
|
+
"python_full_version == '3.14.*' and sys_platform == 'emscripten'",
|
|
4162
|
+
"python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
|
4163
|
+
"python_full_version >= '3.15' and sys_platform == 'win32'",
|
|
4164
|
+
"python_full_version >= '3.15' and sys_platform == 'emscripten'",
|
|
4165
|
+
"python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
|
4166
|
+
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
|
|
4167
|
+
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
|
|
4168
|
+
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
|
4169
|
+
]
|
|
4170
|
+
dependencies = [
|
|
4171
|
+
{ name = "alabaster", marker = "python_full_version >= '3.12'" },
|
|
4172
|
+
{ name = "babel", marker = "python_full_version >= '3.12'" },
|
|
4173
|
+
{ name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" },
|
|
4174
|
+
{ name = "docutils", marker = "python_full_version >= '3.12'" },
|
|
4175
|
+
{ name = "imagesize", marker = "python_full_version >= '3.12'" },
|
|
4176
|
+
{ name = "jinja2", marker = "python_full_version >= '3.12'" },
|
|
4177
|
+
{ name = "packaging", marker = "python_full_version >= '3.12'" },
|
|
4178
|
+
{ name = "pygments", marker = "python_full_version >= '3.12'" },
|
|
4179
|
+
{ name = "requests", marker = "python_full_version >= '3.12'" },
|
|
4180
|
+
{ name = "roman-numerals", marker = "python_full_version >= '3.12'" },
|
|
4181
|
+
{ name = "snowballstemmer", marker = "python_full_version >= '3.12'" },
|
|
4182
|
+
{ name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" },
|
|
4183
|
+
{ name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" },
|
|
4184
|
+
{ name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" },
|
|
4185
|
+
{ name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" },
|
|
4186
|
+
{ name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" },
|
|
4187
|
+
{ name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" },
|
|
4155
4188
|
]
|
|
4156
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
4189
|
+
sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" }
|
|
4157
4190
|
wheels = [
|
|
4158
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
4191
|
+
{ url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742, upload-time = "2025-12-31T15:09:25.561Z" },
|
|
4159
4192
|
]
|
|
4160
4193
|
|
|
4161
4194
|
[[package]]
|
|
@@ -4164,7 +4197,8 @@ version = "3.1.0"
|
|
|
4164
4197
|
source = { registry = "https://pypi.org/simple" }
|
|
4165
4198
|
dependencies = [
|
|
4166
4199
|
{ name = "docutils" },
|
|
4167
|
-
{ name = "sphinx" },
|
|
4200
|
+
{ name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
|
4201
|
+
{ name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
|
4168
4202
|
{ name = "sphinxcontrib-jquery" },
|
|
4169
4203
|
]
|
|
4170
4204
|
sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" }
|
|
@@ -4204,7 +4238,8 @@ name = "sphinxcontrib-jquery"
|
|
|
4204
4238
|
version = "4.1"
|
|
4205
4239
|
source = { registry = "https://pypi.org/simple" }
|
|
4206
4240
|
dependencies = [
|
|
4207
|
-
{ name = "sphinx" },
|
|
4241
|
+
{ name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
|
4242
|
+
{ name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
|
4208
4243
|
]
|
|
4209
4244
|
sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" }
|
|
4210
4245
|
wheels = [
|
pyobs_gui-2.0.0.dev20/README.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
pyobs-gui
|
|
2
|
-
#########
|
|
3
|
-
|
|
4
|
-
This is a `pyobs <https://www.pyobs.org>`_ (`documentation <https://docs.pyobs.org>`_) module providing a GUI
|
|
5
|
-
for operating the whole system.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Example configuration
|
|
9
|
-
*********************
|
|
10
|
-
|
|
11
|
-
This is an example configuration for a GUI that defines one custom widget for the ``guiding`` module::
|
|
12
|
-
|
|
13
|
-
class: pyobs_gui.GUI
|
|
14
|
-
|
|
15
|
-
widgets:
|
|
16
|
-
- module: guiding
|
|
17
|
-
overwrite: True
|
|
18
|
-
widget:
|
|
19
|
-
class: mypackage.GuidingWidget
|
|
20
|
-
|
|
21
|
-
comm:
|
|
22
|
-
jid: test@example.com
|
|
23
|
-
password: ***
|
|
24
|
-
|
|
25
|
-
timezone: Europe/Berlin
|
|
26
|
-
location:
|
|
27
|
-
longitude: 9.944333
|
|
28
|
-
latitude: 51.560583
|
|
29
|
-
elevation: 201.
|
|
30
|
-
|
|
31
|
-
vfs:
|
|
32
|
-
class: pyobs.vfs.VirtualFileSystem
|
|
33
|
-
roots:
|
|
34
|
-
cache:
|
|
35
|
-
class: pyobs.vfs.HttpFile
|
|
36
|
-
download: http://localhost:37075/
|
|
37
|
-
webcam:
|
|
38
|
-
class: pyobs.vfs.HttpFile
|
|
39
|
-
download: http://localhost:37077/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Available classes
|
|
43
|
-
*****************
|
|
44
|
-
|
|
45
|
-
There is one single class for the GUI.
|
|
46
|
-
|
|
47
|
-
GUI
|
|
48
|
-
===
|
|
49
|
-
.. autoclass:: pyobs_gui.GUI
|
|
50
|
-
:members:
|
|
51
|
-
:show-inheritance:
|
|
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.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrow-alt-circle-up-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/pyobs_gui/qt/resources/arrows-to-eye-solid.svg
RENAMED
|
File without changes
|
|
File without changes
|
{pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/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
|
{pyobs_gui-2.0.0.dev20 → pyobs_gui-2.0.0.dev22}/specs/2026-08-20-gui-remote-call-error-handling.md
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
|