kopia lustrzana https://github.com/projecthorus/horus-gui
Move to using Qt6
rodzic
e9a7b31dfb
commit
0bb9088917
|
@ -1 +1 @@
|
|||
__version__ = "0.3.15"
|
||||
__version__ = "0.4.0"
|
||||
|
|
|
@ -77,7 +77,7 @@ def read_config(widgets):
|
|||
global qt_settings, default_config
|
||||
|
||||
# This is getting a bit ridiculous, need to re-think this approach.
|
||||
OK_VERSIONS = [__version__, '0.3.14', '0.3.13', '0.3.12', '0.3.11', '0.3.10', '0.3.9', '0.3.8', '0.3.7', '0.3.6', '0.3.5', '0.3.4', '0.3.1', '0.2.1']
|
||||
OK_VERSIONS = [__version__, '0.3.15', '0.3.14', '0.3.13', '0.3.12', '0.3.11', '0.3.10', '0.3.9', '0.3.8', '0.3.7', '0.3.6', '0.3.5', '0.3.4', '0.3.1', '0.2.1']
|
||||
|
||||
# Try and read in the version parameter from QSettings
|
||||
if qt_settings.value("version") not in OK_VERSIONS:
|
||||
|
|
225
horusgui/gui.py
225
horusgui/gui.py
|
@ -22,7 +22,8 @@ import time
|
|||
import pyqtgraph as pg
|
||||
import numpy as np
|
||||
from queue import Queue
|
||||
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
|
||||
#from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
|
||||
from PyQt6 import QtWidgets, QtGui
|
||||
from pyqtgraph.dockarea import *
|
||||
from threading import Thread
|
||||
|
||||
|
@ -107,7 +108,7 @@ logging.basicConfig(
|
|||
pg.mkQApp()
|
||||
|
||||
# GUI LAYOUT - Gtk Style!
|
||||
win = QtGui.QMainWindow()
|
||||
win = QtWidgets.QMainWindow()
|
||||
area = DockArea()
|
||||
win.setCentralWidget(area)
|
||||
win.setWindowTitle(f"Horus Telemetry GUI - v{__version__}")
|
||||
|
@ -143,14 +144,14 @@ d0_habitat.raiseDock()
|
|||
# Controls
|
||||
w1_audio = pg.LayoutWidget()
|
||||
# TNC Connection
|
||||
widgets["audioDeviceLabel"] = QtGui.QLabel("<b>Audio Device:</b>")
|
||||
widgets["audioDeviceSelector"] = QtGui.QComboBox()
|
||||
widgets["audioDeviceLabel"] = QtWidgets.QLabel("<b>Audio Device:</b>")
|
||||
widgets["audioDeviceSelector"] = QtWidgets.QComboBox()
|
||||
|
||||
widgets["audioSampleRateLabel"] = QtGui.QLabel("<b>Sample Rate (Hz):</b>")
|
||||
widgets["audioSampleRateSelector"] = QtGui.QComboBox()
|
||||
widgets["audioSampleRateLabel"] = QtWidgets.QLabel("<b>Sample Rate (Hz):</b>")
|
||||
widgets["audioSampleRateSelector"] = QtWidgets.QComboBox()
|
||||
|
||||
widgets["audioDbfsLabel"] = QtGui.QLabel("<b>Input Level (dBFS):</b>")
|
||||
widgets["audioDbfsValue"] = QtGui.QLabel("--")
|
||||
widgets["audioDbfsLabel"] = QtWidgets.QLabel("<b>Input Level (dBFS):</b>")
|
||||
widgets["audioDbfsValue"] = QtWidgets.QLabel("--")
|
||||
widgets["audioDbfsValue_float"] = 0.0
|
||||
|
||||
w1_audio.addWidget(widgets["audioDeviceLabel"], 0, 0, 1, 1)
|
||||
|
@ -165,29 +166,29 @@ w1_modem = pg.LayoutWidget()
|
|||
|
||||
|
||||
# Modem Parameters
|
||||
widgets["horusModemLabel"] = QtGui.QLabel("<b>Mode:</b>")
|
||||
widgets["horusModemSelector"] = QtGui.QComboBox()
|
||||
widgets["horusModemLabel"] = QtWidgets.QLabel("<b>Mode:</b>")
|
||||
widgets["horusModemSelector"] = QtWidgets.QComboBox()
|
||||
|
||||
widgets["horusModemRateLabel"] = QtGui.QLabel("<b>Baudrate:</b>")
|
||||
widgets["horusModemRateSelector"] = QtGui.QComboBox()
|
||||
widgets["horusModemRateLabel"] = QtWidgets.QLabel("<b>Baudrate:</b>")
|
||||
widgets["horusModemRateSelector"] = QtWidgets.QComboBox()
|
||||
|
||||
widgets["horusMaskEstimatorLabel"] = QtGui.QLabel("<b>Enable Mask Estim.:</b>")
|
||||
widgets["horusMaskEstimatorSelector"] = QtGui.QCheckBox()
|
||||
widgets["horusMaskEstimatorLabel"] = QtWidgets.QLabel("<b>Enable Mask Estim.:</b>")
|
||||
widgets["horusMaskEstimatorSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["horusMaskEstimatorSelector"].setToolTip(
|
||||
"Enable the mask frequency estimator, which makes uses of the \n"\
|
||||
"tone spacing value entered below as extra input to the frequency\n"\
|
||||
"estimator. This can help decode performance in very weak signal conditions."
|
||||
)
|
||||
|
||||
widgets["horusMaskSpacingLabel"] = QtGui.QLabel("<b>Tone Spacing (Hz):</b>")
|
||||
widgets["horusMaskSpacingEntry"] = QtGui.QLineEdit("270")
|
||||
widgets["horusMaskSpacingLabel"] = QtWidgets.QLabel("<b>Tone Spacing (Hz):</b>")
|
||||
widgets["horusMaskSpacingEntry"] = QtWidgets.QLineEdit("270")
|
||||
widgets["horusMaskSpacingEntry"].setToolTip(
|
||||
"If the tone spacing of the transmitter is known, it can be entered here,\n"\
|
||||
"and used with the mask estimator option above. The default tone spacing for\n"\
|
||||
"a RS41-based transmitter is 270 Hz."
|
||||
)
|
||||
widgets["horusManualEstimatorLabel"] = QtGui.QLabel("<b>Manual Estim. Limits:</b>")
|
||||
widgets["horusManualEstimatorSelector"] = QtGui.QCheckBox()
|
||||
widgets["horusManualEstimatorLabel"] = QtWidgets.QLabel("<b>Manual Estim. Limits:</b>")
|
||||
widgets["horusManualEstimatorSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["horusManualEstimatorSelector"].setToolTip(
|
||||
"Enables manual selection of the frequency estimator limits. This will enable\n"\
|
||||
"a slidable area on the spectrum display, which can be used to select the frequency\n"\
|
||||
|
@ -197,7 +198,7 @@ widgets["horusManualEstimatorSelector"].setToolTip(
|
|||
)
|
||||
|
||||
# Start/Stop
|
||||
widgets["startDecodeButton"] = QtGui.QPushButton("Start")
|
||||
widgets["startDecodeButton"] = QtWidgets.QPushButton("Start")
|
||||
widgets["startDecodeButton"].setEnabled(False)
|
||||
|
||||
w1_modem.addWidget(widgets["horusModemLabel"], 0, 0, 1, 1)
|
||||
|
@ -217,48 +218,48 @@ d0_modem.addWidget(w1_modem)
|
|||
|
||||
w1_habitat = pg.LayoutWidget()
|
||||
# Listener Information
|
||||
widgets["habitatHeading"] = QtGui.QLabel("<b>SondeHub Settings</b>")
|
||||
widgets["sondehubUploadLabel"] = QtGui.QLabel("<b>Enable SondeHub-Ham Upload:</b>")
|
||||
widgets["sondehubUploadSelector"] = QtGui.QCheckBox()
|
||||
widgets["habitatHeading"] = QtWidgets.QLabel("<b>SondeHub Settings</b>")
|
||||
widgets["sondehubUploadLabel"] = QtWidgets.QLabel("<b>Enable SondeHub-Ham Upload:</b>")
|
||||
widgets["sondehubUploadSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["sondehubUploadSelector"].setChecked(True)
|
||||
widgets["userCallLabel"] = QtGui.QLabel("<b>Callsign:</b>")
|
||||
widgets["userCallEntry"] = QtGui.QLineEdit("N0CALL")
|
||||
widgets["userCallLabel"] = QtWidgets.QLabel("<b>Callsign:</b>")
|
||||
widgets["userCallEntry"] = QtWidgets.QLineEdit("N0CALL")
|
||||
widgets["userCallEntry"].setMaxLength(20)
|
||||
widgets["userCallEntry"].setToolTip(
|
||||
"Your station callsign, which doesn't necessarily need to be an\n"\
|
||||
"amateur radio callsign, just something unique!"
|
||||
)
|
||||
widgets["userLocationLabel"] = QtGui.QLabel("<b>Lat/Lon:</b>")
|
||||
widgets["userLatEntry"] = QtGui.QLineEdit("0.0")
|
||||
widgets["userLocationLabel"] = QtWidgets.QLabel("<b>Lat/Lon:</b>")
|
||||
widgets["userLatEntry"] = QtWidgets.QLineEdit("0.0")
|
||||
widgets["userLatEntry"].setToolTip("Station Latitude in Decimal Degrees, e.g. -34.123456")
|
||||
widgets["userLonEntry"] = QtGui.QLineEdit("0.0")
|
||||
widgets["userLonEntry"] = QtWidgets.QLineEdit("0.0")
|
||||
widgets["userLonEntry"].setToolTip("Station Longitude in Decimal Degrees, e.g. 138.123456")
|
||||
widgets["userAltitudeLabel"] = QtGui.QLabel("<b>Altitude:</b>")
|
||||
widgets["userAltEntry"] = QtGui.QLineEdit("0.0")
|
||||
widgets["userAltitudeLabel"] = QtWidgets.QLabel("<b>Altitude:</b>")
|
||||
widgets["userAltEntry"] = QtWidgets.QLineEdit("0.0")
|
||||
widgets["userAltEntry"].setToolTip("Station Altitude in Metres Above Sea Level.")
|
||||
widgets["userAntennaLabel"] = QtGui.QLabel("<b>Antenna:</b>")
|
||||
widgets["userAntennaEntry"] = QtGui.QLineEdit("")
|
||||
widgets["userAntennaLabel"] = QtWidgets.QLabel("<b>Antenna:</b>")
|
||||
widgets["userAntennaEntry"] = QtWidgets.QLineEdit("")
|
||||
widgets["userAntennaEntry"].setToolTip("A text description of your station's antenna.")
|
||||
widgets["userRadioLabel"] = QtGui.QLabel("<b>Radio:</b>")
|
||||
widgets["userRadioEntry"] = QtGui.QLineEdit("Horus-GUI " + __version__)
|
||||
widgets["userRadioLabel"] = QtWidgets.QLabel("<b>Radio:</b>")
|
||||
widgets["userRadioEntry"] = QtWidgets.QLineEdit("Horus-GUI " + __version__)
|
||||
widgets["userRadioEntry"].setToolTip(
|
||||
"A text description of your station's radio setup.\n"\
|
||||
"This field will be automatically prefixed with Horus-GUI."
|
||||
)
|
||||
widgets["habitatUploadPosition"] = QtGui.QPushButton("Re-upload Position")
|
||||
widgets["habitatUploadPosition"] = QtWidgets.QPushButton("Re-upload Position")
|
||||
widgets["habitatUploadPosition"].setToolTip(
|
||||
"Manually re-upload your position information to SondeHub-Amateur.\n"\
|
||||
"Note that it can take a few minutes for your new information to\n"\
|
||||
"appear on the map."
|
||||
)
|
||||
widgets["dialFreqLabel"] = QtGui.QLabel("<b>Radio Dial Freq (MHz):</b>")
|
||||
widgets["dialFreqEntry"] = QtGui.QLineEdit("")
|
||||
widgets["dialFreqLabel"] = QtWidgets.QLabel("<b>Radio Dial Freq (MHz):</b>")
|
||||
widgets["dialFreqEntry"] = QtWidgets.QLineEdit("")
|
||||
widgets["dialFreqEntry"].setToolTip(
|
||||
"Optional entry of your radio's dial frequency in MHz (e.g. 437.600).\n"\
|
||||
"Used to provide frequency information on SondeHub-Amateur."\
|
||||
)
|
||||
|
||||
widgets["saveSettingsButton"] = QtGui.QPushButton("Save Settings")
|
||||
widgets["saveSettingsButton"] = QtWidgets.QPushButton("Save Settings")
|
||||
|
||||
w1_habitat.addWidget(widgets["sondehubUploadLabel"], 0, 0, 1, 1)
|
||||
w1_habitat.addWidget(widgets["sondehubUploadSelector"], 0, 1, 1, 1)
|
||||
|
@ -282,54 +283,54 @@ w1_habitat.addWidget(widgets["saveSettingsButton"], 9, 0, 1, 3)
|
|||
d0_habitat.addWidget(w1_habitat)
|
||||
|
||||
w1_other = pg.LayoutWidget()
|
||||
widgets["horusHeaderLabel"] = QtGui.QLabel("<b><u>Telemetry Forwarding</u></b>")
|
||||
widgets["horusUploadLabel"] = QtGui.QLabel("<b>Enable Horus UDP Output:</b>")
|
||||
widgets["horusUploadSelector"] = QtGui.QCheckBox()
|
||||
widgets["horusHeaderLabel"] = QtWidgets.QLabel("<b><u>Telemetry Forwarding</u></b>")
|
||||
widgets["horusUploadLabel"] = QtWidgets.QLabel("<b>Enable Horus UDP Output:</b>")
|
||||
widgets["horusUploadSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["horusUploadSelector"].setChecked(True)
|
||||
widgets["horusUploadSelector"].setToolTip(
|
||||
"Enable output of 'Horus UDP' JSON messages. These are emitted as a JSON object\n"\
|
||||
"and contain the fields: callsign, time, latitude, longitude, altitude, snr"\
|
||||
)
|
||||
widgets["horusUDPLabel"] = QtGui.QLabel("<b>Horus UDP Port:</b>")
|
||||
widgets["horusUDPEntry"] = QtGui.QLineEdit("55672")
|
||||
widgets["horusUDPLabel"] = QtWidgets.QLabel("<b>Horus UDP Port:</b>")
|
||||
widgets["horusUDPEntry"] = QtWidgets.QLineEdit("55672")
|
||||
widgets["horusUDPEntry"].setMaxLength(5)
|
||||
widgets["horusUDPEntry"].setToolTip(
|
||||
"UDP Port to output 'Horus UDP' JSON messages to."
|
||||
)
|
||||
widgets["ozimuxUploadLabel"] = QtGui.QLabel("<b>Enable OziMux UDP Output:</b>")
|
||||
widgets["ozimuxUploadSelector"] = QtGui.QCheckBox()
|
||||
widgets["ozimuxUploadLabel"] = QtWidgets.QLabel("<b>Enable OziMux UDP Output:</b>")
|
||||
widgets["ozimuxUploadSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["ozimuxUploadSelector"].setChecked(False)
|
||||
widgets["ozimuxUploadSelector"].setToolTip(
|
||||
"Output OziMux UDP messages. These are of the form:\n"\
|
||||
"'TELEMETRY,HH:MM:SS,lat,lon,alt\\n'"
|
||||
)
|
||||
widgets["ozimuxUDPLabel"] = QtGui.QLabel("<b>Ozimux UDP Port:</b>")
|
||||
widgets["ozimuxUDPEntry"] = QtGui.QLineEdit("55683")
|
||||
widgets["ozimuxUDPLabel"] = QtWidgets.QLabel("<b>Ozimux UDP Port:</b>")
|
||||
widgets["ozimuxUDPEntry"] = QtWidgets.QLineEdit("55683")
|
||||
widgets["ozimuxUDPEntry"].setMaxLength(5)
|
||||
widgets["ozimuxUDPEntry"].setToolTip(
|
||||
"UDP Port to output 'OziMux' UDP messages to."
|
||||
)
|
||||
widgets["loggingHeaderLabel"] = QtGui.QLabel("<b><u>Logging</u></b>")
|
||||
widgets["enableLoggingLabel"] = QtGui.QLabel("<b>Enable Logging:</b>")
|
||||
widgets["enableLoggingSelector"] = QtGui.QCheckBox()
|
||||
widgets["loggingHeaderLabel"] = QtWidgets.QLabel("<b><u>Logging</u></b>")
|
||||
widgets["enableLoggingLabel"] = QtWidgets.QLabel("<b>Enable Logging:</b>")
|
||||
widgets["enableLoggingSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["enableLoggingSelector"].setChecked(False)
|
||||
widgets["enableLoggingSelector"].setToolTip(
|
||||
"Enable logging of received telemetry to disk (JSON)"
|
||||
)
|
||||
widgets["loggingFormatLabel"] = QtGui.QLabel("<b>Log Format:</b>")
|
||||
widgets["loggingFormatSelector"] = QtGui.QComboBox()
|
||||
widgets["loggingFormatLabel"] = QtWidgets.QLabel("<b>Log Format:</b>")
|
||||
widgets["loggingFormatSelector"] = QtWidgets.QComboBox()
|
||||
widgets["loggingFormatSelector"].addItem("CSV")
|
||||
widgets["loggingFormatSelector"].addItem("JSON")
|
||||
widgets["loggingPathLabel"] = QtGui.QLabel("<b>Log Directory:</b>")
|
||||
widgets["loggingPathEntry"] = QtGui.QLineEdit("")
|
||||
widgets["loggingPathLabel"] = QtWidgets.QLabel("<b>Log Directory:</b>")
|
||||
widgets["loggingPathEntry"] = QtWidgets.QLineEdit("")
|
||||
widgets["loggingPathEntry"].setToolTip(
|
||||
"Logging Directory"
|
||||
)
|
||||
widgets["selectLogDirButton"] = QtGui.QPushButton("Select Directory")
|
||||
widgets["selectLogDirButton"] = QtWidgets.QPushButton("Select Directory")
|
||||
|
||||
widgets["otherHeaderLabel"] = QtGui.QLabel("<b><u>Other Settings</u></b>")
|
||||
widgets["inhibitCRCLabel"] = QtGui.QLabel("<b>Hide Failed CRC Errors:</b>")
|
||||
widgets["inhibitCRCSelector"] = QtGui.QCheckBox()
|
||||
widgets["otherHeaderLabel"] = QtWidgets.QLabel("<b><u>Other Settings</u></b>")
|
||||
widgets["inhibitCRCLabel"] = QtWidgets.QLabel("<b>Hide Failed CRC Errors:</b>")
|
||||
widgets["inhibitCRCSelector"] = QtWidgets.QCheckBox()
|
||||
widgets["inhibitCRCSelector"].setChecked(True)
|
||||
widgets["inhibitCRCSelector"].setToolTip(
|
||||
"Hide CRC Failed error messages."
|
||||
|
@ -361,41 +362,41 @@ d0_other.addWidget(w1_other)
|
|||
|
||||
|
||||
w1_rotator = pg.LayoutWidget()
|
||||
widgets["rotatorHeaderLabel"] = QtGui.QLabel("<b><u>Rotator Control</u></b>")
|
||||
widgets["rotatorHeaderLabel"] = QtWidgets.QLabel("<b><u>Rotator Control</u></b>")
|
||||
|
||||
widgets["rotatorTypeLabel"] = QtGui.QLabel("<b>Rotator Type:</b>")
|
||||
widgets["rotatorTypeSelector"] = QtGui.QComboBox()
|
||||
widgets["rotatorTypeLabel"] = QtWidgets.QLabel("<b>Rotator Type:</b>")
|
||||
widgets["rotatorTypeSelector"] = QtWidgets.QComboBox()
|
||||
widgets["rotatorTypeSelector"].addItem("rotctld")
|
||||
widgets["rotatorTypeSelector"].addItem("PSTRotator")
|
||||
|
||||
widgets["rotatorHostLabel"] = QtGui.QLabel("<b>Rotator Hostname:</b>")
|
||||
widgets["rotatorHostEntry"] = QtGui.QLineEdit("localhost")
|
||||
widgets["rotatorHostLabel"] = QtWidgets.QLabel("<b>Rotator Hostname:</b>")
|
||||
widgets["rotatorHostEntry"] = QtWidgets.QLineEdit("localhost")
|
||||
widgets["rotatorHostEntry"].setToolTip(
|
||||
"Hostname of the rotctld or PSTRotator Server.\n"\
|
||||
)
|
||||
|
||||
widgets["rotatorPortLabel"] = QtGui.QLabel("<b>Rotator TCP/UDP Port:</b>")
|
||||
widgets["rotatorPortEntry"] = QtGui.QLineEdit("4533")
|
||||
widgets["rotatorPortLabel"] = QtWidgets.QLabel("<b>Rotator TCP/UDP Port:</b>")
|
||||
widgets["rotatorPortEntry"] = QtWidgets.QLineEdit("4533")
|
||||
widgets["rotatorPortEntry"].setMaxLength(5)
|
||||
widgets["rotatorPortEntry"].setToolTip(
|
||||
"TCP (rotctld) or UDP (PSTRotator) port to connect to.\n"\
|
||||
"Default for rotctld: 4533\n"\
|
||||
"Default for PSTRotator: 12000"
|
||||
)
|
||||
widgets["rotatorThresholdLabel"] = QtGui.QLabel("<b>Rotator Movement Threshold:</b>")
|
||||
widgets["rotatorThresholdEntry"] = QtGui.QLineEdit("5.0")
|
||||
widgets["rotatorThresholdLabel"] = QtWidgets.QLabel("<b>Rotator Movement Threshold:</b>")
|
||||
widgets["rotatorThresholdEntry"] = QtWidgets.QLineEdit("5.0")
|
||||
widgets["rotatorThresholdEntry"].setToolTip(
|
||||
"Only move if the angle between the payload position and \n"\
|
||||
"the current rotator position is more than this, in degrees."
|
||||
)
|
||||
|
||||
widgets["rotatorConnectButton"] = QtGui.QPushButton("Start")
|
||||
widgets["rotatorConnectButton"] = QtWidgets.QPushButton("Start")
|
||||
|
||||
widgets["rotatorCurrentStatusLabel"] = QtGui.QLabel("<b>Status:</b>")
|
||||
widgets["rotatorCurrentStatusValue"] = QtGui.QLabel("Not Started.")
|
||||
widgets["rotatorCurrentStatusLabel"] = QtWidgets.QLabel("<b>Status:</b>")
|
||||
widgets["rotatorCurrentStatusValue"] = QtWidgets.QLabel("Not Started.")
|
||||
|
||||
widgets["rotatorCurrentPositionLabel"] = QtGui.QLabel("<b>Commanded Az/El:</b>")
|
||||
widgets["rotatorCurrentPositionValue"] = QtGui.QLabel("---˚, --˚")
|
||||
widgets["rotatorCurrentPositionLabel"] = QtWidgets.QLabel("<b>Commanded Az/El:</b>")
|
||||
widgets["rotatorCurrentPositionValue"] = QtWidgets.QLabel("---˚, --˚")
|
||||
|
||||
|
||||
|
||||
|
@ -429,25 +430,25 @@ widgets["spectrumPlotData"] = widgets["spectrumPlot"].plot([0])
|
|||
widgets["estimatorLines"] = [
|
||||
pg.InfiniteLine(
|
||||
pos=-1000,
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.DashLine),
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.PenStyle.DashLine),
|
||||
label="F1",
|
||||
labelOpts={'position':0.9}
|
||||
),
|
||||
pg.InfiniteLine(
|
||||
pos=-1000,
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.DashLine),
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.PenStyle.DashLine),
|
||||
label="F2",
|
||||
labelOpts={'position':0.9}
|
||||
),
|
||||
pg.InfiniteLine(
|
||||
pos=-1000,
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.DashLine),
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.PenStyle.DashLine),
|
||||
label="F3",
|
||||
labelOpts={'position':0.9}
|
||||
),
|
||||
pg.InfiniteLine(
|
||||
pos=-1000,
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.DashLine),
|
||||
pen=pg.mkPen(color="w", width=2, style=QtCore.Qt.PenStyle.DashLine),
|
||||
label="F4",
|
||||
labelOpts={'position':0.9}
|
||||
),
|
||||
|
@ -472,13 +473,13 @@ widgets["spectrumPlotRange"] = [-100, -20]
|
|||
|
||||
w3_stats = pg.LayoutWidget()
|
||||
widgets["snrBar"] = QtWidgets.QProgressBar()
|
||||
widgets["snrBar"].setOrientation(QtCore.Qt.Vertical)
|
||||
widgets["snrBar"].setOrientation(QtCore.Qt.Orientation.Vertical)
|
||||
widgets["snrBar"].setRange(-10, 15)
|
||||
widgets["snrBar"].setValue(-10)
|
||||
widgets["snrBar"].setTextVisible(False)
|
||||
widgets["snrBar"].setAlignment(QtCore.Qt.AlignCenter)
|
||||
widgets["snrLabel"] = QtGui.QLabel("--.-")
|
||||
widgets["snrLabel"].setAlignment(QtCore.Qt.AlignCenter);
|
||||
widgets["snrBar"].setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
widgets["snrLabel"] = QtWidgets.QLabel("--.-")
|
||||
widgets["snrLabel"].setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter);
|
||||
widgets["snrLabel"].setFont(QtGui.QFont("Courier New", 14))
|
||||
w3_stats.addWidget(widgets["snrBar"], 0, 1, 1, 1)
|
||||
w3_stats.addWidget(widgets["snrLabel"], 1, 0, 1, 3)
|
||||
|
@ -513,14 +514,14 @@ d2_snr.addWidget(widgets["snrPlot"])
|
|||
|
||||
# Telemetry Data
|
||||
w4_data = pg.LayoutWidget()
|
||||
widgets["latestRawSentenceLabel"] = QtGui.QLabel("<b>Latest Packet (Raw):</b>")
|
||||
widgets["latestRawSentenceData"] = QtGui.QLineEdit("NO DATA")
|
||||
widgets["latestRawSentenceLabel"] = QtWidgets.QLabel("<b>Latest Packet (Raw):</b>")
|
||||
widgets["latestRawSentenceData"] = QtWidgets.QLineEdit("NO DATA")
|
||||
widgets["latestRawSentenceData"].setReadOnly(True)
|
||||
widgets["latestDecodedSentenceLabel"] = QtGui.QLabel("<b>Latest Packet (Decoded):</b>")
|
||||
widgets["latestDecodedSentenceData"] = QtGui.QLineEdit("NO DATA")
|
||||
widgets["latestDecodedSentenceLabel"] = QtWidgets.QLabel("<b>Latest Packet (Decoded):</b>")
|
||||
widgets["latestDecodedSentenceData"] = QtWidgets.QLineEdit("NO DATA")
|
||||
widgets["latestDecodedSentenceData"].setReadOnly(True)
|
||||
widgets["latestDecodedAgeLabel"] = QtGui.QLabel("<b>Last Packet Age:</b>")
|
||||
widgets["latestDecodedAgeData"] = QtGui.QLabel("No packet yet!")
|
||||
widgets["latestDecodedAgeLabel"] = QtWidgets.QLabel("<b>Last Packet Age:</b>")
|
||||
widgets["latestDecodedAgeData"] = QtWidgets.QLabel("No packet yet!")
|
||||
w4_data.addWidget(widgets["latestRawSentenceLabel"], 0, 0, 1, 1)
|
||||
w4_data.addWidget(widgets["latestRawSentenceData"], 0, 1, 1, 6)
|
||||
w4_data.addWidget(widgets["latestDecodedSentenceLabel"], 1, 0, 1, 1)
|
||||
|
@ -536,30 +537,30 @@ if 'Windows' in platform.system():
|
|||
else:
|
||||
POSITION_LABEL_FONT_SIZE = 16
|
||||
|
||||
widgets["latestPacketCallsignLabel"] = QtGui.QLabel("<b>Callsign</b>")
|
||||
widgets["latestPacketCallsignValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketCallsignValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketTimeLabel"] = QtGui.QLabel("<b>Time</b>")
|
||||
widgets["latestPacketTimeValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketTimeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketLatitudeLabel"] = QtGui.QLabel("<b>Latitude</b>")
|
||||
widgets["latestPacketLatitudeValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketLatitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketLongitudeLabel"] = QtGui.QLabel("<b>Longitude</b>")
|
||||
widgets["latestPacketLongitudeValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketLongitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketAltitudeLabel"] = QtGui.QLabel("<b>Altitude</b>")
|
||||
widgets["latestPacketAltitudeValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketAltitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketBearingLabel"] = QtGui.QLabel("<b>Bearing</b>")
|
||||
widgets["latestPacketBearingValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketBearingValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketElevationLabel"] = QtGui.QLabel("<b>Elevation</b>")
|
||||
widgets["latestPacketElevationValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketElevationValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketRangeLabel"] = QtGui.QLabel("<b>Range (km)</b>")
|
||||
widgets["latestPacketRangeValue"] = QtGui.QLabel("---")
|
||||
widgets["latestPacketRangeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Bold))
|
||||
widgets["latestPacketCallsignLabel"] = QtWidgets.QLabel("<b>Callsign</b>")
|
||||
widgets["latestPacketCallsignValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketCallsignValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketTimeLabel"] = QtWidgets.QLabel("<b>Time</b>")
|
||||
widgets["latestPacketTimeValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketTimeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketLatitudeLabel"] = QtWidgets.QLabel("<b>Latitude</b>")
|
||||
widgets["latestPacketLatitudeValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketLatitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketLongitudeLabel"] = QtWidgets.QLabel("<b>Longitude</b>")
|
||||
widgets["latestPacketLongitudeValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketLongitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketAltitudeLabel"] = QtWidgets.QLabel("<b>Altitude</b>")
|
||||
widgets["latestPacketAltitudeValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketAltitudeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketBearingLabel"] = QtWidgets.QLabel("<b>Bearing</b>")
|
||||
widgets["latestPacketBearingValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketBearingValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketElevationLabel"] = QtWidgets.QLabel("<b>Elevation</b>")
|
||||
widgets["latestPacketElevationValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketElevationValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
widgets["latestPacketRangeLabel"] = QtWidgets.QLabel("<b>Range (km)</b>")
|
||||
widgets["latestPacketRangeValue"] = QtWidgets.QLabel("---")
|
||||
widgets["latestPacketRangeValue"].setFont(QtGui.QFont("Courier New", POSITION_LABEL_FONT_SIZE, QtGui.QFont.Weight.Bold))
|
||||
|
||||
w4_position.addWidget(widgets["latestPacketCallsignLabel"], 0, 0, 1, 2)
|
||||
w4_position.addWidget(widgets["latestPacketCallsignValue"], 1, 0, 1, 2)
|
||||
|
@ -1060,7 +1061,7 @@ def handle_new_packet(frame):
|
|||
telemetry_logger.add(_decoded)
|
||||
|
||||
# Try and force a refresh of the displays.
|
||||
QtGui.QApplication.processEvents()
|
||||
QtWidgets.QApplication.processEvents()
|
||||
|
||||
|
||||
|
||||
|
@ -1264,7 +1265,7 @@ def processQueues():
|
|||
widgets['latestDecodedAgeData'].setText(f"{_time_delta_hours:02d}:{_time_delta_minutes:02d}:{_time_delta_seconds:02d}")
|
||||
|
||||
# Try and force a re-draw.
|
||||
QtGui.QApplication.processEvents()
|
||||
QtWidgets.QApplication.processEvents()
|
||||
|
||||
if not decoder_init:
|
||||
# Initialise decoders, and other libraries here.
|
||||
|
@ -1373,7 +1374,7 @@ logging.info("Started GUI.")
|
|||
def main():
|
||||
# Start the Qt Loop
|
||||
if (sys.flags.interactive != 1) or not hasattr(QtCore, "PYQT_VERSION"):
|
||||
QtGui.QApplication.instance().exec_()
|
||||
QtWidgets.QApplication.instance().exec()
|
||||
save_config(widgets)
|
||||
|
||||
try:
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Useful widgets
|
||||
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
# Useful class for adding horizontal lines.
|
||||
class QHLine(QtGui.QFrame):
|
||||
class QHLine(QtWidgets.QFrame):
|
||||
def __init__(self):
|
||||
super(QHLine, self).__init__()
|
||||
self.setFrameShape(QtGui.QFrame.HLine)
|
||||
self.setFrameShadow(QtGui.QFrame.Sunken)
|
||||
self.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
self.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[tool.poetry]
|
||||
name = "horusgui"
|
||||
version = "0.3.15"
|
||||
version = "0.4.0"
|
||||
description = ""
|
||||
authors = ["Mark Jessop <vk5qi@rfhead.net>"]
|
||||
|
||||
|
@ -8,8 +8,8 @@ authors = ["Mark Jessop <vk5qi@rfhead.net>"]
|
|||
python = "^3.6"
|
||||
requests = "^2.24.0"
|
||||
crcmod = "^1.7"
|
||||
PyQt5 = "^5.13.0"
|
||||
pyqtgraph = "^0.11.0"
|
||||
PyQt6 = "^6.6.0"
|
||||
pyqtgraph = "^0.13.0"
|
||||
pyaudio = "^0.2.11"
|
||||
"ruamel.yaml" = "^0.16.10"
|
||||
horusdemodlib = "^0.3.13"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
numpy
|
||||
pyaudio
|
||||
crcmod
|
||||
PyQt5
|
||||
pyqtgraph==0.12.4
|
||||
PyQt6
|
||||
pyqtgraph
|
||||
ruamel.yaml
|
||||
requests
|
||||
horusdemodlib>=0.3.12
|
||||
|
|
Ładowanie…
Reference in New Issue