kopia lustrzana https://github.com/NanoVNA-Saver/nanovna-saver
pyqt6
rodzic
2c58b2ba8f
commit
b768a8e01b
|
@ -12,4 +12,4 @@ disable=W0614,C0410,C0321,C0111,I0011,C0103
|
|||
# allow ls for list
|
||||
good-names=_,a,b,c,dt,db,e,f,fn,fd,i,j,k,v,kv,kw,l,m,n,ls,t,t0,t1,t2,t3,w,h,x,y,z,it,op
|
||||
[MASTER]
|
||||
extension-pkg-whitelist=PyQt5
|
||||
extension-pkg-whitelist=PyQt6
|
||||
|
|
|
@ -39,7 +39,7 @@ points, and generally display and analyze the resulting data.
|
|||
* Copyright 2019, 2020 Rune B. Broberg
|
||||
* Copyright 2020ff NanoVNA-Saver Authors
|
||||
|
||||
It's written in **Python 3** using **PyQt5** and **scipy**.
|
||||
It's written in **Python 3** using **PyQt6** and **scipy**.
|
||||
|
||||
|
||||
Introduction
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
pyserial==3.5
|
||||
PyQt5==5.15.9
|
||||
PyQt6==5.15.9
|
||||
numpy==1.24.2
|
||||
scipy==1.10.1
|
||||
Cython==0.29.33
|
||||
|
|
|
@ -31,7 +31,7 @@ python_requires = >=3.8, <4
|
|||
# For more information, check out https://semver.org/.
|
||||
install_requires =
|
||||
pyserial>=3.5
|
||||
PyQt5>=5.15.0
|
||||
PyQt6>=5.15.0
|
||||
numpy>=1.21.1
|
||||
scipy>=1.7.1
|
||||
Cython>=0.29.24
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
import logging
|
||||
from time import sleep
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
from NanoVNASaver.Analysis.VSWRAnalysis import VSWRAnalysis
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import logging
|
|||
import math
|
||||
from typing import Dict, List
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
import NanoVNASaver.AnalyticTools as at
|
||||
from NanoVNASaver.Analysis.Base import Analysis, CUTOFF_VALS
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
from typing import Dict
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -28,7 +28,7 @@ CUTOFF_VALS = (3.0, 6.0, 10.0, 20.0, 60.0)
|
|||
class QHLine(QtWidgets.QFrame):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
self.setFrameShape(QtWidgets.QFrame.Shape.HLine)
|
||||
|
||||
|
||||
class Analysis:
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import csv
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
import NanoVNASaver.AnalyticTools as at
|
||||
from NanoVNASaver.Analysis.ResonanceAnalysis import (
|
||||
|
|
|
@ -20,7 +20,7 @@ import logging
|
|||
import math
|
||||
from typing import Dict, List
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
import NanoVNASaver.AnalyticTools as at
|
||||
from NanoVNASaver.Analysis.Base import Analysis, CUTOFF_VALS
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
import numpy as np
|
||||
|
||||
# pylint: disable=import-error, no-name-in-module
|
||||
|
|
|
@ -21,7 +21,7 @@ import csv
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
import NanoVNASaver.AnalyticTools as at
|
||||
from NanoVNASaver.Analysis.Base import Analysis, QHLine
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import logging
|
||||
from typing import Callable, List, Tuple
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
import numpy as np
|
||||
|
||||
from NanoVNASaver.Analysis.Base import Analysis, QHLine
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
import NanoVNASaver.AnalyticTools as at
|
||||
from NanoVNASaver.Analysis.Base import Analysis, QHLine
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
|
|
@ -21,9 +21,9 @@ import logging
|
|||
from dataclasses import dataclass, field, replace
|
||||
from typing import List, Set, Tuple, ClassVar, Any, Optional
|
||||
|
||||
from PyQt5 import QtWidgets, QtGui, QtCore
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
from PyQt5.QtGui import QColor
|
||||
from PyQt6 import QtWidgets, QtGui, QtCore
|
||||
from PyQt6.QtCore import pyqtSignal, Qt
|
||||
from PyQt6.QtGui import QColor, QColorConstants, QAction
|
||||
|
||||
from NanoVNASaver import Defaults
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
@ -34,20 +34,24 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
@dataclass
|
||||
class ChartColors: # pylint: disable=too-many-instance-attributes
|
||||
background: QColor = field(default_factory=lambda: QColor(QtCore.Qt.white))
|
||||
background: QColor = field(
|
||||
default_factory=lambda: QColor(QColorConstants.White)
|
||||
)
|
||||
foreground: QColor = field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.lightGray)
|
||||
default_factory=lambda: QColor(QColorConstants.LightGray)
|
||||
)
|
||||
reference: QColor = field(default_factory=lambda: QColor(0, 0, 255, 64))
|
||||
reference_secondary: QColor = field(
|
||||
default_factory=lambda: QColor(0, 0, 192, 48)
|
||||
)
|
||||
sweep: QColor = field(default_factory=lambda: QColor(QtCore.Qt.darkYellow))
|
||||
sweep: QColor = field(
|
||||
default_factory=lambda: QColor(QColorConstants.DarkYellow)
|
||||
)
|
||||
sweep_secondary: QColor = field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.darkMagenta)
|
||||
default_factory=lambda: QColor(QColorConstants.DarkMagenta)
|
||||
)
|
||||
swr: QColor = field(default_factory=lambda: QColor(255, 0, 0, 128))
|
||||
text: QColor = field(default_factory=lambda: QColor(QtCore.Qt.black))
|
||||
text: QColor = field(default_factory=lambda: QColor(QColorConstants.Black))
|
||||
bands: QColor = field(default_factory=lambda: QColor(128, 128, 128, 48))
|
||||
|
||||
|
||||
|
@ -130,17 +134,17 @@ class Chart(QtWidgets.QWidget):
|
|||
self.markers: List[Marker] = []
|
||||
self.swrMarkers: Set[float] = set()
|
||||
|
||||
self.action_popout = QtWidgets.QAction("Popout chart")
|
||||
self.action_popout = QAction("Popout chart")
|
||||
self.action_popout.triggered.connect(
|
||||
lambda: self.popoutRequested.emit(self)
|
||||
)
|
||||
self.addAction(self.action_popout)
|
||||
|
||||
self.action_save_screenshot = QtWidgets.QAction("Save image")
|
||||
self.action_save_screenshot = QAction("Save image")
|
||||
self.action_save_screenshot.triggered.connect(self.saveScreenshot)
|
||||
self.addAction(self.action_save_screenshot)
|
||||
|
||||
self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||
self.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
||||
|
||||
def setReference(self, data):
|
||||
self.reference = data
|
||||
|
@ -209,21 +213,21 @@ class Chart(QtWidgets.QWidget):
|
|||
self.update()
|
||||
|
||||
def mousePressEvent(self, event: QtGui.QMouseEvent) -> None:
|
||||
if event.buttons() == QtCore.Qt.RightButton:
|
||||
if event.buttons() == Qt.MouseButton.RightButton:
|
||||
event.ignore()
|
||||
return
|
||||
if event.buttons() == QtCore.Qt.MiddleButton:
|
||||
if event.buttons() == Qt.MouseButton.MiddleButton:
|
||||
# Drag event
|
||||
event.accept()
|
||||
self.dragbox.move_x = event.x()
|
||||
self.dragbox.move_y = event.y()
|
||||
return
|
||||
if event.modifiers() == QtCore.Qt.ControlModifier:
|
||||
if event.modifiers() == Qt.KeyboardModifier.ControlModifier:
|
||||
event.accept()
|
||||
self.dragbox.state = True
|
||||
self.dragbox.pos_start = (event.x(), event.y())
|
||||
return
|
||||
if event.modifiers() == QtCore.Qt.ShiftModifier:
|
||||
if event.modifiers() == Qt.KeyboardModifier.ShiftModifier:
|
||||
self.draggedMarker = self.getNearestMarker(event.x(), event.y())
|
||||
self.mouseMoveEvent(event)
|
||||
|
||||
|
@ -233,8 +237,8 @@ class Chart(QtWidgets.QWidget):
|
|||
self.zoomTo(
|
||||
self.dragbox.pos_start[0],
|
||||
self.dragbox.pos_start[1],
|
||||
a0.x(),
|
||||
a0.y(),
|
||||
a0.position().x(),
|
||||
a0.position().y(),
|
||||
)
|
||||
self.dragbox.state = False
|
||||
self.dragbox.pos = (-1, -1)
|
||||
|
@ -248,8 +252,8 @@ class Chart(QtWidgets.QWidget):
|
|||
return
|
||||
modifiers = a0.modifiers()
|
||||
|
||||
zoom_x = modifiers != QtCore.Qt.ShiftModifier
|
||||
zoom_y = modifiers != QtCore.Qt.ControlModifier
|
||||
zoom_x = modifiers != Qt.KeyboardModifier.ShiftModifier
|
||||
zoom_y = modifiers != Qt.KeyboardModifier.ControlModifier
|
||||
rate = -delta / 120
|
||||
# zooming in 10% increments and 9% complementary
|
||||
divisor = 10 if delta > 0 else 9
|
||||
|
@ -257,8 +261,8 @@ class Chart(QtWidgets.QWidget):
|
|||
factor_x = rate * self.dim.width / divisor if zoom_x else 0
|
||||
factor_y = rate * self.dim.height / divisor if zoom_y else 0
|
||||
|
||||
abs_x = max(0, a0.x() - self.leftMargin)
|
||||
abs_y = max(0, a0.y() - self.topMargin)
|
||||
abs_x = max(0, a0.position().x() - self.leftMargin)
|
||||
abs_y = max(0, a0.position().y() - self.topMargin)
|
||||
|
||||
ratio_x = abs_x / self.dim.width
|
||||
ratio_y = abs_y / self.dim.height
|
||||
|
@ -337,6 +341,6 @@ class Chart(QtWidgets.QWidget):
|
|||
|
||||
def update(self):
|
||||
pal = self.palette()
|
||||
pal.setColor(QtGui.QPalette.Background, Chart.color.background)
|
||||
pal.setColor(QtGui.QPalette.ColorRole.Window, Chart.color.background)
|
||||
self.setPalette(pal)
|
||||
super().update()
|
||||
|
|
|
@ -21,7 +21,8 @@ import logging
|
|||
from typing import List, Tuple
|
||||
|
||||
import numpy as np
|
||||
from PyQt5 import QtWidgets, QtGui, QtCore
|
||||
from PyQt6 import QtWidgets, QtGui, QtCore
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.Formatting import (
|
||||
|
@ -68,22 +69,22 @@ class FrequencyChart(Chart):
|
|||
self.maxValue = 1
|
||||
self.span = 1
|
||||
|
||||
self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
|
||||
mode_group = QtWidgets.QActionGroup(self)
|
||||
self.setContextMenuPolicy(Qt.ContextMenuPolicy.DefaultContextMenu)
|
||||
mode_group = QtGui.QActionGroup(self)
|
||||
self.menu = QtWidgets.QMenu()
|
||||
|
||||
self.reset = QtWidgets.QAction("Reset")
|
||||
self.reset = QtGui.QAction("Reset")
|
||||
self.reset.triggered.connect(self.resetDisplayLimits)
|
||||
self.menu.addAction(self.reset)
|
||||
|
||||
self.x_menu = QtWidgets.QMenu("Frequency axis")
|
||||
self.action_automatic = QtWidgets.QAction("Automatic")
|
||||
self.action_automatic = QtGui.QAction("Automatic")
|
||||
self.action_automatic.setCheckable(True)
|
||||
self.action_automatic.setChecked(True)
|
||||
self.action_automatic.changed.connect(
|
||||
lambda: self.setFixedSpan(self.action_fixed_span.isChecked())
|
||||
)
|
||||
self.action_fixed_span = QtWidgets.QAction("Fixed span")
|
||||
self.action_fixed_span = QtGui.QAction("Fixed span")
|
||||
self.action_fixed_span.setCheckable(True)
|
||||
self.action_fixed_span.changed.connect(
|
||||
lambda: self.setFixedSpan(self.action_fixed_span.isChecked())
|
||||
|
@ -94,12 +95,12 @@ class FrequencyChart(Chart):
|
|||
self.x_menu.addAction(self.action_fixed_span)
|
||||
self.x_menu.addSeparator()
|
||||
|
||||
self.action_set_fixed_start = QtWidgets.QAction(
|
||||
self.action_set_fixed_start = QtGui.QAction(
|
||||
f"Start ({format_frequency_chart(self.minFrequency)})"
|
||||
)
|
||||
self.action_set_fixed_start.triggered.connect(self.setMinimumFrequency)
|
||||
|
||||
self.action_set_fixed_stop = QtWidgets.QAction(
|
||||
self.action_set_fixed_stop = QtGui.QAction(
|
||||
f"Stop ({format_frequency_chart(self.maxFrequency)})"
|
||||
)
|
||||
self.action_set_fixed_stop.triggered.connect(self.setMaximumFrequency)
|
||||
|
@ -108,10 +109,10 @@ class FrequencyChart(Chart):
|
|||
self.x_menu.addAction(self.action_set_fixed_stop)
|
||||
|
||||
self.x_menu.addSeparator()
|
||||
frequency_mode_group = QtWidgets.QActionGroup(self.x_menu)
|
||||
self.action_set_linear_x = QtWidgets.QAction("Linear")
|
||||
frequency_mode_group = QtGui.QActionGroup(self.x_menu)
|
||||
self.action_set_linear_x = QtGui.QAction("Linear")
|
||||
self.action_set_linear_x.setCheckable(True)
|
||||
self.action_set_logarithmic_x = QtWidgets.QAction("Logarithmic")
|
||||
self.action_set_logarithmic_x = QtGui.QAction("Logarithmic")
|
||||
self.action_set_logarithmic_x.setCheckable(True)
|
||||
frequency_mode_group.addAction(self.action_set_linear_x)
|
||||
frequency_mode_group.addAction(self.action_set_logarithmic_x)
|
||||
|
@ -126,30 +127,30 @@ class FrequencyChart(Chart):
|
|||
self.x_menu.addAction(self.action_set_logarithmic_x)
|
||||
|
||||
self.y_menu = QtWidgets.QMenu("Data axis")
|
||||
self.y_action_automatic = QtWidgets.QAction("Automatic")
|
||||
self.y_action_automatic = QtGui.QAction("Automatic")
|
||||
self.y_action_automatic.setCheckable(True)
|
||||
self.y_action_automatic.setChecked(True)
|
||||
self.y_action_automatic.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed_span.isChecked())
|
||||
)
|
||||
self.y_action_fixed_span = QtWidgets.QAction("Fixed span")
|
||||
self.y_action_fixed_span = QtGui.QAction("Fixed span")
|
||||
self.y_action_fixed_span.setCheckable(True)
|
||||
self.y_action_fixed_span.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed_span.isChecked())
|
||||
)
|
||||
mode_group = QtWidgets.QActionGroup(self)
|
||||
mode_group = QtGui.QActionGroup(self)
|
||||
mode_group.addAction(self.y_action_automatic)
|
||||
mode_group.addAction(self.y_action_fixed_span)
|
||||
self.y_menu.addAction(self.y_action_automatic)
|
||||
self.y_menu.addAction(self.y_action_fixed_span)
|
||||
self.y_menu.addSeparator()
|
||||
|
||||
self.action_set_fixed_minimum = QtWidgets.QAction(
|
||||
self.action_set_fixed_minimum = QtGui.QAction(
|
||||
f"Minimum ({self.minDisplayValue})"
|
||||
)
|
||||
self.action_set_fixed_minimum.triggered.connect(self.setMinimumValue)
|
||||
|
||||
self.action_set_fixed_maximum = QtWidgets.QAction(
|
||||
self.action_set_fixed_maximum = QtGui.QAction(
|
||||
f"Maximum ({self.maxDisplayValue})"
|
||||
)
|
||||
self.action_set_fixed_maximum.triggered.connect(self.setMaximumValue)
|
||||
|
@ -159,10 +160,10 @@ class FrequencyChart(Chart):
|
|||
|
||||
if self.logarithmicYAllowed(): # This only works for some plot types
|
||||
self.y_menu.addSeparator()
|
||||
vertical_mode_group = QtWidgets.QActionGroup(self.y_menu)
|
||||
self.action_set_linear_y = QtWidgets.QAction("Linear")
|
||||
vertical_mode_group = QtGui.QActionGroup(self.y_menu)
|
||||
self.action_set_linear_y = QtGui.QAction("Linear")
|
||||
self.action_set_linear_y.setCheckable(True)
|
||||
self.action_set_logarithmic_y = QtWidgets.QAction("Logarithmic")
|
||||
self.action_set_logarithmic_y = QtGui.QAction("Logarithmic")
|
||||
self.action_set_logarithmic_y.setCheckable(True)
|
||||
vertical_mode_group.addAction(self.action_set_linear_y)
|
||||
vertical_mode_group.addAction(self.action_set_logarithmic_y)
|
||||
|
@ -180,12 +181,12 @@ class FrequencyChart(Chart):
|
|||
self.menu.addMenu(self.y_menu)
|
||||
self.menu.addSeparator()
|
||||
self.menu.addAction(self.action_save_screenshot)
|
||||
self.action_popout = QtWidgets.QAction("Popout chart")
|
||||
self.action_popout = QtGui.QAction("Popout chart")
|
||||
self.action_popout.triggered.connect(
|
||||
lambda: self.popoutRequested.emit(self)
|
||||
)
|
||||
self.menu.addAction(self.action_popout)
|
||||
self.setFocusPolicy(QtCore.Qt.ClickFocus)
|
||||
self.setFocusPolicy(Qt.FocusPolicy.ClickFocus)
|
||||
|
||||
self.setMinimumSize(
|
||||
self.dim.width + self.rightMargin + self.leftMargin,
|
||||
|
@ -193,12 +194,12 @@ class FrequencyChart(Chart):
|
|||
)
|
||||
self.setSizePolicy(
|
||||
QtWidgets.QSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
)
|
||||
pal = QtGui.QPalette()
|
||||
pal.setColor(QtGui.QPalette.Background, Chart.color.background)
|
||||
pal.setColor(QtGui.QPalette.ColorRole.Window, Chart.color.background)
|
||||
self.setPalette(pal)
|
||||
self.setAutoFillBackground(True)
|
||||
|
||||
|
@ -437,15 +438,15 @@ class FrequencyChart(Chart):
|
|||
self.update()
|
||||
|
||||
def mouseMoveEvent(self, a0: QtGui.QMouseEvent):
|
||||
if a0.buttons() == QtCore.Qt.RightButton:
|
||||
if a0.buttons() == Qt.MouseButton.RightButton:
|
||||
a0.ignore()
|
||||
return
|
||||
if a0.buttons() == QtCore.Qt.MiddleButton:
|
||||
if a0.buttons() == Qt.MouseButton.MiddleButton:
|
||||
# Drag the display
|
||||
a0.accept()
|
||||
if self.dragbox.move_x != -1 and self.dragbox.move_y != -1:
|
||||
dx = self.dragbox.move_x - a0.x()
|
||||
dy = self.dragbox.move_y - a0.y()
|
||||
dx = self.dragbox.move_x - a0.position().x()
|
||||
dy = self.dragbox.move_y - a0.position().y()
|
||||
self.zoomTo(
|
||||
self.leftMargin + dx,
|
||||
self.topMargin + dy,
|
||||
|
@ -453,18 +454,18 @@ class FrequencyChart(Chart):
|
|||
self.topMargin + self.dim.height + dy,
|
||||
)
|
||||
|
||||
self.dragbox.move_x = a0.x()
|
||||
self.dragbox.move_y = a0.y()
|
||||
self.dragbox.move_x = a0.position().x()
|
||||
self.dragbox.move_y = a0.position().y()
|
||||
return
|
||||
if a0.modifiers() == QtCore.Qt.ControlModifier:
|
||||
if a0.modifiers() == Qt.KeyboardModifier.ControlModifier:
|
||||
# Dragging a box
|
||||
if not self.dragbox.state:
|
||||
self.dragbox.pos_start = (a0.x(), a0.y())
|
||||
self.dragbox.pos = (a0.x(), a0.y())
|
||||
self.dragbox.pos_start = (a0.position().x(), a0.position().y())
|
||||
self.dragbox.pos = (a0.position().x(), a0.position().y())
|
||||
self.update()
|
||||
a0.accept()
|
||||
return
|
||||
x = a0.x()
|
||||
x = a0.position().x()
|
||||
f = self.frequencyAtPosition(x)
|
||||
if x == -1:
|
||||
a0.ignore()
|
||||
|
@ -500,7 +501,7 @@ class FrequencyChart(Chart):
|
|||
and (not self.reference or self._data_oob(self.reference))
|
||||
):
|
||||
# Data outside frequency range
|
||||
qp.setBackgroundMode(QtCore.Qt.OpaqueMode)
|
||||
qp.setBackgroundMode(Qt.OpaqueMode)
|
||||
qp.setBackground(Chart.color.background)
|
||||
qp.setPen(Chart.color.text)
|
||||
qp.drawText(
|
||||
|
@ -510,7 +511,7 @@ class FrequencyChart(Chart):
|
|||
)
|
||||
|
||||
def drawDragbog(self, qp: QtGui.QPainter):
|
||||
dashed_pen = QtGui.QPen(Chart.color.foreground, 1, QtCore.Qt.DashLine)
|
||||
dashed_pen = QtGui.QPen(Chart.color.foreground, 1, Qt.DashLine)
|
||||
qp.setPen(dashed_pen)
|
||||
top_left = QtCore.QPoint(
|
||||
self.dragbox.pos_start[0], self.dragbox.pos_start[1]
|
||||
|
@ -803,16 +804,14 @@ class FrequencyChart(Chart):
|
|||
|
||||
def keyPressEvent(self, a0: QtGui.QKeyEvent) -> None:
|
||||
m = self.getActiveMarker()
|
||||
if m is not None and a0.modifiers() == QtCore.Qt.NoModifier:
|
||||
if a0.key() in [QtCore.Qt.Key_Down, QtCore.Qt.Key_Left]:
|
||||
if m is not None and a0.modifiers() == Qt.KeyboardModifier.NoModifier:
|
||||
if a0.key() in [Qt.Key.Key_Down, Qt.Key.Key_Left]:
|
||||
m.frequencyInput.keyPressEvent(
|
||||
QtGui.QKeyEvent(
|
||||
a0.type(), QtCore.Qt.Key_Down, a0.modifiers()
|
||||
)
|
||||
QtGui.QKeyEvent(a0.type(), Qt.Key.Key_Down, a0.modifiers())
|
||||
)
|
||||
elif a0.key() in [QtCore.Qt.Key_Up, QtCore.Qt.Key_Right]:
|
||||
elif a0.key() in [Qt.Key.Key_Up, Qt.Key.Key_Right]:
|
||||
m.frequencyInput.keyPressEvent(
|
||||
QtGui.QKeyEvent(a0.type(), QtCore.Qt.Key_Up, a0.modifiers())
|
||||
QtGui.QKeyEvent(a0.type(), Qt.Key.Key_Up, a0.modifiers())
|
||||
)
|
||||
else:
|
||||
super().keyPressEvent(a0)
|
||||
|
|
|
@ -22,7 +22,7 @@ from typing import List
|
|||
|
||||
import numpy as np
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
|
|
@ -21,7 +21,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.Charts.Frequency import FrequencyChart
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.SITools import Format, Value, round_ceil, round_floor
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Marker.Widget import Marker
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
|
|
@ -22,7 +22,7 @@ import logging
|
|||
from typing import List
|
||||
import numpy as np
|
||||
|
||||
from PyQt5 import QtWidgets, QtGui
|
||||
from PyQt6 import QtWidgets, QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
@ -47,7 +47,7 @@ class PhaseChart(FrequencyChart):
|
|||
self.maxDisplayValue = 180
|
||||
|
||||
self.y_menu.addSeparator()
|
||||
self.action_unwrap = QtWidgets.QAction("Unwrap")
|
||||
self.action_unwrap = QtGui.QAction("Unwrap")
|
||||
self.action_unwrap.setCheckable(True)
|
||||
self.action_unwrap.triggered.connect(
|
||||
lambda: self.setUnwrap(self.action_unwrap.isChecked())
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
from PyQt5 import QtGui, QtCore
|
||||
from PyQt6 import QtGui, QtCore
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.Charts.Square import SquareChart
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List, Optional
|
||||
|
||||
from PyQt5 import QtWidgets, QtGui
|
||||
from PyQt6 import QtWidgets, QtGui
|
||||
|
||||
from NanoVNASaver.Formatting import format_frequency_chart
|
||||
from NanoVNASaver.Marker.Widget import Marker
|
||||
|
@ -58,18 +58,18 @@ class RealImaginaryChart(FrequencyChart):
|
|||
|
||||
self.y_menu.clear()
|
||||
|
||||
self.y_action_automatic = QtWidgets.QAction("Automatic")
|
||||
self.y_action_automatic = QtGui.QAction("Automatic")
|
||||
self.y_action_automatic.setCheckable(True)
|
||||
self.y_action_automatic.setChecked(True)
|
||||
self.y_action_automatic.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed_span.isChecked())
|
||||
)
|
||||
self.y_action_fixed_span = QtWidgets.QAction("Fixed span")
|
||||
self.y_action_fixed_span = QtGui.QAction("Fixed span")
|
||||
self.y_action_fixed_span.setCheckable(True)
|
||||
self.y_action_fixed_span.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed_span.isChecked())
|
||||
)
|
||||
mode_group = QtWidgets.QActionGroup(self)
|
||||
mode_group = QtGui.QActionGroup(self)
|
||||
mode_group.addAction(self.y_action_automatic)
|
||||
mode_group.addAction(self.y_action_fixed_span)
|
||||
self.y_menu.addAction(self.y_action_automatic)
|
||||
|
|
|
@ -21,7 +21,7 @@ import numpy as np
|
|||
import logging
|
||||
from scipy.constants import mu_0
|
||||
|
||||
from PyQt5 import QtWidgets, QtGui
|
||||
from PyQt6 import QtWidgets, QtGui
|
||||
|
||||
from NanoVNASaver.Formatting import format_frequency_chart
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
@ -38,28 +38,28 @@ class RealImaginaryMuChart(RealImaginaryChart):
|
|||
super().__init__(name)
|
||||
self.y_menu.addSeparator()
|
||||
|
||||
self.action_set_fixed_maximum_real = QtWidgets.QAction(
|
||||
self.action_set_fixed_maximum_real = QtGui.QAction(
|
||||
f"Maximum {MU}' ({self.maxDisplayReal})"
|
||||
)
|
||||
self.action_set_fixed_maximum_real.triggered.connect(
|
||||
self.setMaximumRealValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_minimum_real = QtWidgets.QAction(
|
||||
self.action_set_fixed_minimum_real = QtGui.QAction(
|
||||
f"Minimum {MU}' ({self.minDisplayReal})"
|
||||
)
|
||||
self.action_set_fixed_minimum_real.triggered.connect(
|
||||
self.setMinimumRealValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_maximum_imag = QtWidgets.QAction(
|
||||
self.action_set_fixed_maximum_imag = QtGui.QAction(
|
||||
f"Maximum {MU}'' ({self.maxDisplayImag})"
|
||||
)
|
||||
self.action_set_fixed_maximum_imag.triggered.connect(
|
||||
self.setMaximumImagValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_minimum_imag = QtWidgets.QAction(
|
||||
self.action_set_fixed_minimum_imag = QtGui.QAction(
|
||||
f"Minimum {MU}'' ({self.minDisplayImag})"
|
||||
)
|
||||
self.action_set_fixed_minimum_imag.triggered.connect(
|
||||
|
@ -79,15 +79,13 @@ class RealImaginaryMuChart(RealImaginaryChart):
|
|||
self.coreWindings = 1
|
||||
|
||||
self.menu.addSeparator()
|
||||
self.action_set_core_length = QtWidgets.QAction("Core effective length")
|
||||
self.action_set_core_length = QtGui.QAction("Core effective length")
|
||||
self.action_set_core_length.triggered.connect(self.setCoreLength)
|
||||
|
||||
self.action_set_core_area = QtWidgets.QAction("Core area")
|
||||
self.action_set_core_area = QtGui.QAction("Core area")
|
||||
self.action_set_core_area.triggered.connect(self.setCoreArea)
|
||||
|
||||
self.action_set_core_windings = QtWidgets.QAction(
|
||||
"Core number of windings"
|
||||
)
|
||||
self.action_set_core_windings = QtGui.QAction("Core number of windings")
|
||||
self.action_set_core_windings.triggered.connect(self.setCoreWindings)
|
||||
|
||||
self.menu.addAction(self.action_set_core_length)
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtGui
|
||||
from PyQt6 import QtWidgets, QtGui
|
||||
|
||||
from NanoVNASaver.Formatting import format_frequency_chart
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
@ -34,28 +34,28 @@ class RealImaginaryZChart(RealImaginaryChart):
|
|||
super().__init__(name)
|
||||
self.y_menu.addSeparator()
|
||||
|
||||
self.action_set_fixed_maximum_real = QtWidgets.QAction(
|
||||
self.action_set_fixed_maximum_real = QtGui.QAction(
|
||||
f"Maximum R ({self.maxDisplayReal})"
|
||||
)
|
||||
self.action_set_fixed_maximum_real.triggered.connect(
|
||||
self.setMaximumRealValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_minimum_real = QtWidgets.QAction(
|
||||
self.action_set_fixed_minimum_real = QtGui.QAction(
|
||||
f"Minimum R ({self.minDisplayReal})"
|
||||
)
|
||||
self.action_set_fixed_minimum_real.triggered.connect(
|
||||
self.setMinimumRealValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_maximum_imag = QtWidgets.QAction(
|
||||
self.action_set_fixed_maximum_imag = QtGui.QAction(
|
||||
f"Maximum jX ({self.maxDisplayImag})"
|
||||
)
|
||||
self.action_set_fixed_maximum_imag.triggered.connect(
|
||||
self.setMaximumImagValue
|
||||
)
|
||||
|
||||
self.action_set_fixed_minimum_imag = QtWidgets.QAction(
|
||||
self.action_set_fixed_minimum_imag = QtGui.QAction(
|
||||
f"Minimum jX ({self.minDisplayImag})"
|
||||
)
|
||||
self.action_set_fixed_minimum_imag.triggered.connect(
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
from PyQt5 import QtGui, QtCore
|
||||
from PyQt6 import QtGui, QtCore
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.Charts.Square import SquareChart
|
||||
|
|
|
@ -20,7 +20,7 @@ import logging
|
|||
import math
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui, QtCore, QtWidgets
|
||||
from PyQt6 import QtGui, QtCore, QtWidgets
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
@ -32,7 +32,8 @@ class SquareChart(Chart):
|
|||
def __init__(self, name=""):
|
||||
super().__init__(name)
|
||||
sizepolicy = QtWidgets.QSizePolicy(
|
||||
QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.MinimumExpanding
|
||||
QtWidgets.QSizePolicy.Policy.Fixed,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
self.setSizePolicy(sizepolicy)
|
||||
self.dim.width = 250
|
||||
|
@ -40,7 +41,7 @@ class SquareChart(Chart):
|
|||
self.setMinimumSize(self.dim.width + 40, self.dim.height + 40)
|
||||
|
||||
pal = QtGui.QPalette()
|
||||
pal.setColor(QtGui.QPalette.Background, Chart.color.background)
|
||||
pal.setColor(QtGui.QPalette.ColorRole.Window, Chart.color.background)
|
||||
self.setPalette(pal)
|
||||
self.setAutoFillBackground(True)
|
||||
|
||||
|
@ -112,12 +113,12 @@ class SquareChart(Chart):
|
|||
self.update()
|
||||
|
||||
def mouseMoveEvent(self, a0: QtGui.QMouseEvent):
|
||||
if a0.buttons() == QtCore.Qt.RightButton:
|
||||
if a0.buttons() == QtCore.Qt.MouseButton.RightButton:
|
||||
a0.ignore()
|
||||
return
|
||||
|
||||
x = a0.x()
|
||||
y = a0.y()
|
||||
x = a0.position().x()
|
||||
y = a0.position().y()
|
||||
absx = x - (self.width() - self.dim.width) / 2
|
||||
absy = y - (self.height() - self.dim.height) / 2
|
||||
if (
|
||||
|
|
|
@ -20,7 +20,8 @@ import math
|
|||
import logging
|
||||
|
||||
import numpy as np
|
||||
from PyQt5 import QtWidgets, QtGui, QtCore
|
||||
from PyQt6 import QtWidgets, QtGui, QtCore
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
||||
|
@ -48,31 +49,31 @@ class TDRChart(Chart):
|
|||
self.setMinimumSize(300, 300)
|
||||
self.setSizePolicy(
|
||||
QtWidgets.QSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
)
|
||||
pal = QtGui.QPalette()
|
||||
pal.setColor(QtGui.QPalette.Background, Chart.color.background)
|
||||
pal.setColor(QtGui.QPalette.ColorRole.Window, Chart.color.background)
|
||||
self.setPalette(pal)
|
||||
self.setAutoFillBackground(True)
|
||||
|
||||
self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
|
||||
self.setContextMenuPolicy(Qt.ContextMenuPolicy.DefaultContextMenu)
|
||||
self.menu = QtWidgets.QMenu()
|
||||
|
||||
self.reset = QtWidgets.QAction("Reset")
|
||||
self.reset = QtGui.QAction("Reset")
|
||||
self.reset.triggered.connect(self.resetDisplayLimits)
|
||||
self.menu.addAction(self.reset)
|
||||
|
||||
self.x_menu = QtWidgets.QMenu("Length axis")
|
||||
self.mode_group = QtWidgets.QActionGroup(self.x_menu)
|
||||
self.action_automatic = QtWidgets.QAction("Automatic")
|
||||
self.mode_group = QtGui.QActionGroup(self.x_menu)
|
||||
self.action_automatic = QtGui.QAction("Automatic")
|
||||
self.action_automatic.setCheckable(True)
|
||||
self.action_automatic.setChecked(True)
|
||||
self.action_automatic.changed.connect(
|
||||
lambda: self.setFixedSpan(self.action_fixed_span.isChecked())
|
||||
)
|
||||
self.action_fixed_span = QtWidgets.QAction("Fixed span")
|
||||
self.action_fixed_span = QtGui.QAction("Fixed span")
|
||||
self.action_fixed_span.setCheckable(True)
|
||||
self.action_fixed_span.changed.connect(
|
||||
lambda: self.setFixedSpan(self.action_fixed_span.isChecked())
|
||||
|
@ -83,12 +84,12 @@ class TDRChart(Chart):
|
|||
self.x_menu.addAction(self.action_fixed_span)
|
||||
self.x_menu.addSeparator()
|
||||
|
||||
self.action_set_fixed_start = QtWidgets.QAction(
|
||||
self.action_set_fixed_start = QtGui.QAction(
|
||||
f"Start ({self.minDisplayLength})"
|
||||
)
|
||||
self.action_set_fixed_start.triggered.connect(self.setMinimumLength)
|
||||
|
||||
self.action_set_fixed_stop = QtWidgets.QAction(
|
||||
self.action_set_fixed_stop = QtGui.QAction(
|
||||
f"Stop ({self.maxDisplayLength})"
|
||||
)
|
||||
self.action_set_fixed_stop.triggered.connect(self.setMaximumLength)
|
||||
|
@ -97,14 +98,14 @@ class TDRChart(Chart):
|
|||
self.x_menu.addAction(self.action_set_fixed_stop)
|
||||
|
||||
self.y_menu = QtWidgets.QMenu("Impedance axis")
|
||||
self.y_mode_group = QtWidgets.QActionGroup(self.y_menu)
|
||||
self.y_action_automatic = QtWidgets.QAction("Automatic")
|
||||
self.y_mode_group = QtGui.QActionGroup(self.y_menu)
|
||||
self.y_action_automatic = QtGui.QAction("Automatic")
|
||||
self.y_action_automatic.setCheckable(True)
|
||||
self.y_action_automatic.setChecked(True)
|
||||
self.y_action_automatic.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed.isChecked())
|
||||
)
|
||||
self.y_action_fixed = QtWidgets.QAction("Fixed")
|
||||
self.y_action_fixed = QtGui.QAction("Fixed")
|
||||
self.y_action_fixed.setCheckable(True)
|
||||
self.y_action_fixed.changed.connect(
|
||||
lambda: self.setFixedValues(self.y_action_fixed.isChecked())
|
||||
|
@ -115,14 +116,14 @@ class TDRChart(Chart):
|
|||
self.y_menu.addAction(self.y_action_fixed)
|
||||
self.y_menu.addSeparator()
|
||||
|
||||
self.y_action_set_fixed_maximum = QtWidgets.QAction(
|
||||
self.y_action_set_fixed_maximum = QtGui.QAction(
|
||||
f"Maximum ({self.maxImpedance})"
|
||||
)
|
||||
self.y_action_set_fixed_maximum.triggered.connect(
|
||||
self.setMaximumImpedance
|
||||
)
|
||||
|
||||
self.y_action_set_fixed_minimum = QtWidgets.QAction(
|
||||
self.y_action_set_fixed_minimum = QtGui.QAction(
|
||||
f"Minimum ({self.minImpedance})"
|
||||
)
|
||||
self.y_action_set_fixed_minimum.triggered.connect(
|
||||
|
@ -136,7 +137,7 @@ class TDRChart(Chart):
|
|||
self.menu.addMenu(self.y_menu)
|
||||
self.menu.addSeparator()
|
||||
self.menu.addAction(self.action_save_screenshot)
|
||||
self.action_popout = QtWidgets.QAction("Popout chart")
|
||||
self.action_popout = QtGui.QAction("Popout chart")
|
||||
self.action_popout.triggered.connect(
|
||||
lambda: self.popoutRequested.emit(self)
|
||||
)
|
||||
|
@ -256,34 +257,34 @@ class TDRChart(Chart):
|
|||
return new_chart
|
||||
|
||||
def mouseMoveEvent(self, a0: QtGui.QMouseEvent) -> None:
|
||||
if a0.buttons() == QtCore.Qt.RightButton:
|
||||
if a0.buttons() == Qt.MouseButton.RightButton:
|
||||
a0.ignore()
|
||||
return
|
||||
if a0.buttons() == QtCore.Qt.MiddleButton:
|
||||
if a0.buttons() == Qt.MouseButton.MiddleButton:
|
||||
# Drag the display
|
||||
a0.accept()
|
||||
if self.dragbox.move_x != -1 and self.dragbox.move_y != -1:
|
||||
dx = self.dragbox.move_x - a0.x()
|
||||
dy = self.dragbox.move_y - a0.y()
|
||||
dx = self.dragbox.move_x - a0.position().x()
|
||||
dy = self.dragbox.move_y - a0.position().y()
|
||||
self.zoomTo(
|
||||
self.leftMargin + dx,
|
||||
self.topMargin + dy,
|
||||
self.leftMargin + self.dim.width + dx,
|
||||
self.topMargin + self.dim.height + dy,
|
||||
)
|
||||
self.dragbox.move_x = a0.x()
|
||||
self.dragbox.move_y = a0.y()
|
||||
self.dragbox.move_x = a0.position().x()
|
||||
self.dragbox.move_y = a0.position().y()
|
||||
return
|
||||
if a0.modifiers() == QtCore.Qt.ControlModifier:
|
||||
if a0.modifiers() == Qt.KeyboardModifier.ControlModifier:
|
||||
# Dragging a box
|
||||
if not self.dragbox.state:
|
||||
self.dragbox.pos_start = (a0.x(), a0.y())
|
||||
self.dragbox.pos = (a0.x(), a0.y())
|
||||
self.dragbox.pos_start = (a0.position().x(), a0.position().y())
|
||||
self.dragbox.pos = (a0.position().x(), a0.position().y())
|
||||
self.update()
|
||||
a0.accept()
|
||||
return
|
||||
|
||||
x = a0.x()
|
||||
x = a0.position().x()
|
||||
absx = x - self.leftMargin
|
||||
if absx < 0 or absx > self.width() - self.rightMargin:
|
||||
a0.ignore()
|
||||
|
|
|
@ -20,7 +20,7 @@ import math
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Charts.Chart import Chart
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt5.QtWidgets import QCheckBox
|
||||
from PyQt6 import QtWidgets, QtCore
|
||||
from PyQt6.QtWidgets import QCheckBox, QSizePolicy
|
||||
|
||||
from NanoVNASaver import Defaults
|
||||
from NanoVNASaver.Marker.Widget import Marker
|
||||
|
@ -70,9 +70,11 @@ class MarkerControl(Control):
|
|||
self.showMarkerButton.clicked.connect(self.toggle_frame)
|
||||
|
||||
lock_radiobutton = QtWidgets.QRadioButton("Locked")
|
||||
lock_radiobutton.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
lock_radiobutton.setLayoutDirection(
|
||||
QtCore.Qt.LayoutDirection.RightToLeft
|
||||
)
|
||||
lock_radiobutton.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred
|
||||
QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Preferred
|
||||
)
|
||||
|
||||
hbox = QtWidgets.QHBoxLayout()
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import logging
|
||||
from time import sleep
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
from NanoVNASaver.Hardware.Hardware import Interface, get_interfaces, get_VNA
|
||||
from NanoVNASaver.Controls.Control import Control
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore
|
||||
|
||||
from NanoVNASaver.Formatting import (
|
||||
format_frequency_sweep,
|
||||
|
@ -36,7 +36,7 @@ class SweepControl(Control):
|
|||
super().__init__(app, "Sweep control")
|
||||
|
||||
line = QtWidgets.QFrame()
|
||||
line.setFrameShape(QtWidgets.QFrame.VLine)
|
||||
line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
|
||||
|
||||
input_layout = QtWidgets.QHBoxLayout()
|
||||
input_left_layout = QtWidgets.QFormLayout()
|
||||
|
@ -49,14 +49,14 @@ class SweepControl(Control):
|
|||
self.input_start = FrequencyInputWidget()
|
||||
self.input_start.setFixedHeight(20)
|
||||
self.input_start.setMinimumWidth(60)
|
||||
self.input_start.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_start.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_start.textEdited.connect(self.update_center_span)
|
||||
self.input_start.textChanged.connect(self.update_step_size)
|
||||
input_left_layout.addRow(QtWidgets.QLabel("Start"), self.input_start)
|
||||
|
||||
self.input_end = FrequencyInputWidget()
|
||||
self.input_end.setFixedHeight(20)
|
||||
self.input_end.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_end.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_end.textEdited.connect(self.update_center_span)
|
||||
self.input_end.textChanged.connect(self.update_step_size)
|
||||
input_left_layout.addRow(QtWidgets.QLabel("Stop"), self.input_end)
|
||||
|
@ -64,14 +64,14 @@ class SweepControl(Control):
|
|||
self.input_center = FrequencyInputWidget()
|
||||
self.input_center.setFixedHeight(20)
|
||||
self.input_center.setMinimumWidth(60)
|
||||
self.input_center.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_center.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_center.textEdited.connect(self.update_start_end)
|
||||
|
||||
input_right_layout.addRow(QtWidgets.QLabel("Center"), self.input_center)
|
||||
|
||||
self.input_span = FrequencyInputWidget()
|
||||
self.input_span.setFixedHeight(20)
|
||||
self.input_span.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_span.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_span.textEdited.connect(self.update_start_end)
|
||||
|
||||
input_right_layout.addRow(QtWidgets.QLabel("Span"), self.input_span)
|
||||
|
@ -79,14 +79,15 @@ class SweepControl(Control):
|
|||
self.input_segments = QtWidgets.QLineEdit(
|
||||
self.app.settings.value("Segments", "1")
|
||||
)
|
||||
self.input_segments.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_segments.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_segments.setFixedHeight(20)
|
||||
self.input_segments.setFixedWidth(60)
|
||||
self.input_segments.textEdited.connect(self.update_step_size)
|
||||
|
||||
self.label_step = QtWidgets.QLabel("Hz/step")
|
||||
self.label_step.setAlignment(
|
||||
QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter
|
||||
QtCore.Qt.AlignmentFlag.AlignRight
|
||||
| QtCore.Qt.AlignmentFlag.AlignVCenter
|
||||
)
|
||||
|
||||
segment_layout = QtWidgets.QHBoxLayout()
|
||||
|
@ -110,11 +111,13 @@ class SweepControl(Control):
|
|||
self.btn_start = QtWidgets.QPushButton("Sweep")
|
||||
self.btn_start.setFixedHeight(20)
|
||||
self.btn_start.clicked.connect(self.app.sweep_start)
|
||||
self.btn_start.setShortcut(QtCore.Qt.Key_W | QtCore.Qt.CTRL)
|
||||
self.btn_start.setShortcut(
|
||||
QtCore.Qt.Key.Key_Control + QtCore.Qt.Key.Key_W
|
||||
)
|
||||
self.btn_stop = QtWidgets.QPushButton("Stop")
|
||||
self.btn_stop.setFixedHeight(20)
|
||||
self.btn_stop.clicked.connect(self.app.sweep_stop)
|
||||
self.btn_stop.setShortcut(QtCore.Qt.Key_Escape)
|
||||
self.btn_stop.setShortcut(QtCore.Qt.Key.Key_Escape)
|
||||
self.btn_stop.setDisabled(True)
|
||||
btn_layout = QtWidgets.QHBoxLayout()
|
||||
btn_layout.addWidget(self.btn_start)
|
||||
|
|
|
@ -21,9 +21,9 @@ import dataclasses as DC
|
|||
import logging
|
||||
from ast import literal_eval
|
||||
|
||||
from PyQt5 import QtCore
|
||||
from PyQt5.QtCore import QSettings, QByteArray
|
||||
from PyQt5.QtGui import QColor
|
||||
from PyQt6 import QtCore
|
||||
from PyQt6.QtCore import QSettings, QByteArray
|
||||
from PyQt6.QtGui import QColor, QColorConstants
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -69,23 +69,25 @@ class Chart:
|
|||
@DC.dataclass
|
||||
class ChartColors: # pylint: disable=too-many-instance-attributes
|
||||
background: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.white)
|
||||
default_factory=lambda: QColor(QColorConstants.White)
|
||||
)
|
||||
foreground: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.lightGray)
|
||||
default_factory=lambda: QColor(QColorConstants.LightGray)
|
||||
)
|
||||
reference: QColor = DC.field(default_factory=lambda: QColor(0, 0, 255, 64))
|
||||
reference_secondary: QColor = DC.field(
|
||||
default_factory=lambda: QColor(0, 0, 192, 48)
|
||||
)
|
||||
sweep: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.darkYellow)
|
||||
default_factory=lambda: QColor(QColorConstants.DarkYellow)
|
||||
)
|
||||
sweep_secondary: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.darkMagenta)
|
||||
default_factory=lambda: QColor(QColorConstants.DarkMagenta)
|
||||
)
|
||||
swr: QColor = DC.field(default_factory=lambda: QColor(255, 0, 0, 128))
|
||||
text: QColor = DC.field(default_factory=lambda: QColor(QtCore.Qt.black))
|
||||
text: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QColorConstants.Black)
|
||||
)
|
||||
bands: QColor = DC.field(default_factory=lambda: QColor(128, 128, 128, 48))
|
||||
|
||||
|
||||
|
@ -110,7 +112,7 @@ class Markers:
|
|||
)
|
||||
colored_names: bool = True
|
||||
color_0: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.darkGray)
|
||||
default_factory=lambda: QColor(QColorConstants.DarkGray)
|
||||
)
|
||||
color_1: QColor = DC.field(default_factory=lambda: QColor(255, 0, 0))
|
||||
color_2: QColor = DC.field(default_factory=lambda: QColor(0, 255, 0))
|
||||
|
@ -119,7 +121,7 @@ class Markers:
|
|||
color_5: QColor = DC.field(default_factory=lambda: QColor(255, 0, 255))
|
||||
color_6: QColor = DC.field(default_factory=lambda: QColor(255, 255, 0))
|
||||
color_7: QColor = DC.field(
|
||||
default_factory=lambda: QColor(QtCore.Qt.lightGray)
|
||||
default_factory=lambda: QColor(QColorConstants.LightGray)
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ from typing import List
|
|||
|
||||
import serial
|
||||
import numpy as np
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Hardware.Serial import drain_serial, Interface
|
||||
from NanoVNASaver.Hardware.VNA import VNA
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
import logging
|
||||
|
||||
import serial
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Hardware.NanoVNA import NanoVNA
|
||||
from NanoVNASaver.Hardware.Serial import Interface
|
||||
|
|
|
@ -22,7 +22,7 @@ from typing import List
|
|||
|
||||
import serial
|
||||
import numpy as np
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Hardware.Serial import drain_serial, Interface
|
||||
from NanoVNASaver.Hardware.VNA import VNA
|
||||
|
|
|
@ -20,7 +20,7 @@ import logging
|
|||
from time import sleep
|
||||
from typing import List, Iterator, Set
|
||||
|
||||
from PyQt5 import QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from NanoVNASaver.Version import Version
|
||||
from NanoVNASaver.Hardware.Serial import Interface, drain_serial
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
from PyQt5 import QtGui, QtWidgets, QtCore
|
||||
from PyQt6 import QtGui, QtWidgets, QtCore
|
||||
from NanoVNASaver.Formatting import format_frequency_inputs
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
from PyQt5 import QtCore
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from NanoVNASaver import RFTools
|
||||
from NanoVNASaver.Formatting import (
|
||||
|
|
|
@ -19,8 +19,9 @@
|
|||
import math
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtGui, QtWidgets, QtCore
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
from PyQt6 import QtGui, QtWidgets, QtCore
|
||||
from PyQt6.QtCore import pyqtSignal
|
||||
from PyQt6.QtGui import QColorConstants
|
||||
|
||||
from NanoVNASaver import RFTools
|
||||
from NanoVNASaver.Formatting import (
|
||||
|
@ -43,7 +44,7 @@ from NanoVNASaver.Inputs import MarkerFrequencyInputWidget as FrequencyInput
|
|||
from NanoVNASaver.Marker.Values import TYPES, Value, default_label_ids
|
||||
|
||||
COLORS = (
|
||||
QtGui.QColor(QtCore.Qt.darkGray),
|
||||
QtGui.QColor(QColorConstants.DarkGray),
|
||||
QtGui.QColor(255, 0, 0),
|
||||
QtGui.QColor(0, 255, 0),
|
||||
QtGui.QColor(0, 0, 255),
|
||||
|
@ -90,7 +91,7 @@ class Marker(QtCore.QObject, Value):
|
|||
|
||||
self.frequencyInput = FrequencyInput()
|
||||
self.frequencyInput.setMinimumHeight(20)
|
||||
self.frequencyInput.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.frequencyInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.frequencyInput.editingFinished.connect(
|
||||
lambda: self.setFrequency(
|
||||
parse_frequency(self.frequencyInput.text())
|
||||
|
@ -117,7 +118,8 @@ class Marker(QtCore.QObject, Value):
|
|||
self.btnColorPicker.clicked.connect(
|
||||
lambda: self.setColor(
|
||||
QtWidgets.QColorDialog.getColor(
|
||||
self.color, options=QtWidgets.QColorDialog.ShowAlphaChannel
|
||||
self.color,
|
||||
options=QtWidgets.QColorDialog.ColorDialogOption.ShowAlphaChannel,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -148,7 +150,7 @@ class Marker(QtCore.QObject, Value):
|
|||
self.setColor(COLORS[0])
|
||||
|
||||
line = QtWidgets.QFrame()
|
||||
line.setFrameShape(QtWidgets.QFrame.VLine)
|
||||
line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
|
||||
|
||||
# line only if more then 3 selected
|
||||
self.left_form = QtWidgets.QFormLayout()
|
||||
|
@ -183,7 +185,7 @@ class Marker(QtCore.QObject, Value):
|
|||
self.label["returnloss"].setMinimumWidth(int(80 * scale))
|
||||
if self.coloredText:
|
||||
color_string = QtCore.QVariant(self.color)
|
||||
color_string.convert(QtCore.QVariant.String)
|
||||
# color_string.convert(QtCore.QVariant.String)
|
||||
self.group_box.setStyleSheet(
|
||||
f"QGroupBox {{ color: {color_string.value()}; "
|
||||
f"font-size: {self._size_str()}}};"
|
||||
|
@ -230,11 +232,11 @@ class Marker(QtCore.QObject, Value):
|
|||
if color.isValid():
|
||||
self.color = color
|
||||
p = self.btnColorPicker.palette()
|
||||
p.setColor(QtGui.QPalette.ButtonText, self.color)
|
||||
# TODO: p.setColor(QtGui.QPalette.ButtonText, self.color)
|
||||
self.btnColorPicker.setPalette(p)
|
||||
if self.coloredText:
|
||||
color_string = QtCore.QVariant(color)
|
||||
color_string.convert(QtCore.QVariant.String)
|
||||
# TODO: color_string.convert(str)
|
||||
self.group_box.setStyleSheet(
|
||||
f"QGroupBox {{ color: {color_string.value()}; "
|
||||
f"font-size: {self._size_str()}}};"
|
||||
|
|
|
@ -22,7 +22,7 @@ import sys
|
|||
import threading
|
||||
from time import strftime, localtime
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from NanoVNASaver import Defaults
|
||||
from .Windows import (
|
||||
|
@ -95,8 +95,8 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
self.icon = QtGui.QIcon("icon_48x48.png")
|
||||
self.setWindowIcon(self.icon)
|
||||
self.settings = Defaults.AppSettings(
|
||||
QtCore.QSettings.IniFormat,
|
||||
QtCore.QSettings.UserScope,
|
||||
QtCore.QSettings.Format.IniFormat,
|
||||
QtCore.QSettings.Scope.UserScope,
|
||||
"NanoVNASaver",
|
||||
"NanoVNASaver",
|
||||
)
|
||||
|
@ -140,7 +140,9 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
self.baseTitle = f"NanoVNA Saver {NanoVNASaver.version}"
|
||||
self.updateTitle()
|
||||
layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight)
|
||||
layout = QtWidgets.QBoxLayout(
|
||||
QtWidgets.QBoxLayout.Direction.LeftToRight
|
||||
)
|
||||
|
||||
scrollarea = QtWidgets.QScrollArea()
|
||||
outer = QtWidgets.QVBoxLayout()
|
||||
|
@ -151,12 +153,12 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
Defaults.cfg.gui.window_width, Defaults.cfg.gui.window_height
|
||||
)
|
||||
scrollarea.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
self.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
widget = QtWidgets.QWidget()
|
||||
widget.setLayout(layout)
|
||||
|
@ -236,7 +238,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
self.charts_layout = QtWidgets.QGridLayout()
|
||||
|
||||
QtWidgets.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close)
|
||||
QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close)
|
||||
|
||||
###############################################################
|
||||
# Create main layout
|
||||
|
@ -388,8 +390,8 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
QtWidgets.QSpacerItem(
|
||||
1,
|
||||
1,
|
||||
QtWidgets.QSizePolicy.Fixed,
|
||||
QtWidgets.QSizePolicy.Expanding,
|
||||
QtWidgets.QSizePolicy.Policy.Fixed,
|
||||
QtWidgets.QSizePolicy.Policy.Expanding,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ import contextlib
|
|||
import logging
|
||||
import typing
|
||||
|
||||
from PyQt5 import QtCore, QtGui
|
||||
from PyQt5.QtCore import QModelIndex
|
||||
from PyQt6 import QtCore, QtGui
|
||||
from PyQt6.QtCore import QModelIndex, Qt
|
||||
|
||||
_DEFAULT_BANDS = (
|
||||
"2200 m;135700;137800",
|
||||
|
@ -58,12 +58,12 @@ class BandsModel(QtCore.QAbstractTableModel):
|
|||
def __init__(self):
|
||||
super().__init__()
|
||||
self.settings = QtCore.QSettings(
|
||||
QtCore.QSettings.IniFormat,
|
||||
QtCore.QSettings.UserScope,
|
||||
QtCore.QSettings.Format.IniFormat,
|
||||
QtCore.QSettings.Scope.UserScope,
|
||||
"NanoVNASaver",
|
||||
"Bands",
|
||||
)
|
||||
self.settings.setIniCodec("UTF-8")
|
||||
# self.settings.setIniCodec("UTF-8")
|
||||
|
||||
self.enabled = self.settings.value("ShowBands", False, bool)
|
||||
self.bands = [
|
||||
|
@ -91,16 +91,15 @@ class BandsModel(QtCore.QAbstractTableModel):
|
|||
|
||||
def data(self, index: QModelIndex, role: int = ...) -> QtCore.QVariant:
|
||||
if role in [
|
||||
QtCore.Qt.DisplayRole,
|
||||
QtCore.Qt.ItemDataRole,
|
||||
QtCore.Qt.EditRole,
|
||||
Qt.ItemDataRole.DisplayRole,
|
||||
Qt.ItemDataRole.EditRole,
|
||||
]:
|
||||
return QtCore.QVariant(self.bands[index.row()][index.column()])
|
||||
if role == QtCore.Qt.TextAlignmentRole:
|
||||
if role == Qt.ItemDataRole.TextAlignmentRole:
|
||||
if index.column() == 0:
|
||||
return QtCore.QVariant(QtCore.Qt.AlignCenter)
|
||||
return QtCore.QVariant(Qt.AlignmentFlag.AlignCenter)
|
||||
return QtCore.QVariant(
|
||||
QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter
|
||||
Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter
|
||||
)
|
||||
return QtCore.QVariant()
|
||||
|
||||
|
@ -141,22 +140,22 @@ class BandsModel(QtCore.QAbstractTableModel):
|
|||
return True
|
||||
|
||||
def headerData(
|
||||
self, section: int, orientation: QtCore.Qt.Orientation, role: int = ...
|
||||
self, section: int, orientation: Qt.Orientation, role: int = ...
|
||||
):
|
||||
if (
|
||||
role == QtCore.Qt.DisplayRole
|
||||
and orientation == QtCore.Qt.Horizontal
|
||||
role == Qt.ItemDataRole.DisplayRole
|
||||
and orientation == Qt.Orientation.Horizontal
|
||||
):
|
||||
with contextlib.suppress(IndexError):
|
||||
return _HEADER_DATA[section]
|
||||
return None
|
||||
|
||||
def flags(self, index: QModelIndex) -> QtCore.Qt.ItemFlags:
|
||||
def flags(self, index: QModelIndex) -> Qt.ItemFlag:
|
||||
if index.isValid():
|
||||
return QtCore.Qt.ItemFlags(
|
||||
QtCore.Qt.ItemIsEditable
|
||||
| QtCore.Qt.ItemIsEnabled
|
||||
| QtCore.Qt.ItemIsSelectable
|
||||
return Qt.ItemFlag(
|
||||
Qt.ItemFlag.ItemIsEditable
|
||||
| Qt.ItemFlag.ItemIsEnabled
|
||||
| Qt.ItemFlag.ItemIsSelectable
|
||||
)
|
||||
super().flags(index)
|
||||
|
||||
|
|
|
@ -21,8 +21,8 @@ from time import sleep
|
|||
from typing import List, Tuple
|
||||
|
||||
import numpy as np
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
from PyQt5.QtCore import pyqtSlot, pyqtSignal
|
||||
from PyQt6 import QtCore, QtWidgets
|
||||
from PyQt6.QtCore import pyqtSlot, pyqtSignal
|
||||
|
||||
from NanoVNASaver.Calibration import correct_delay
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
|
|
|
@ -21,7 +21,7 @@ import logging
|
|||
from time import strftime, localtime
|
||||
from urllib import request, error
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from NanoVNASaver.About import VERSION_URL, INFO_URL
|
||||
from NanoVNASaver.Version import Version
|
||||
|
@ -41,7 +41,7 @@ class AboutWindow(QtWidgets.QWidget):
|
|||
top_layout = QtWidgets.QHBoxLayout()
|
||||
make_scrollable(self, top_layout)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
icon_layout = QtWidgets.QVBoxLayout()
|
||||
top_layout.addLayout(icon_layout)
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from NanoVNASaver.Analysis.AntennaAnalysis import MagLoopAnalysis
|
||||
from NanoVNASaver.Analysis.BandPassAnalysis import BandPassAnalysis
|
||||
|
@ -49,7 +50,7 @@ class AnalysisWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Sweep analysis")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
make_scrollable(self, layout)
|
||||
|
@ -96,8 +97,8 @@ class AnalysisWindow(QtWidgets.QWidget):
|
|||
|
||||
analysis_box = QtWidgets.QGroupBox("Analysis")
|
||||
analysis_box.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
|
||||
self.analysis_layout = QtWidgets.QVBoxLayout(analysis_box)
|
||||
|
@ -126,8 +127,8 @@ class AnalysisWindow(QtWidgets.QWidget):
|
|||
self.analysis.widget().show()
|
||||
self.update()
|
||||
|
||||
def toggleAutomaticRun(self, state: QtCore.Qt.CheckState):
|
||||
if state == QtCore.Qt.Checked:
|
||||
def toggleAutomaticRun(self, state: Qt.CheckState):
|
||||
if state == Qt.CheckState.Checked:
|
||||
self.analysis_list.setDisabled(True)
|
||||
self.app.dataAvailable.connect(self.runAnalysis)
|
||||
else:
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -31,7 +31,7 @@ class BandsWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Manage bands")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
self.setLayout(layout)
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
import logging
|
||||
from functools import partial
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from NanoVNASaver.Calibration import Calibration
|
||||
from NanoVNASaver.Settings.Sweep import SweepMode
|
||||
|
@ -51,11 +51,11 @@ class CalibrationWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Calibration")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
self.setSizePolicy(
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
QtWidgets.QSizePolicy.Policy.MinimumExpanding,
|
||||
)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
top_layout = QtWidgets.QHBoxLayout()
|
||||
left_layout = QtWidgets.QVBoxLayout()
|
||||
|
@ -106,7 +106,7 @@ class CalibrationWindow(QtWidgets.QWidget):
|
|||
self.input_offset_delay.setMinimumHeight(20)
|
||||
self.input_offset_delay.setValue(0)
|
||||
self.input_offset_delay.setSuffix(" ps")
|
||||
self.input_offset_delay.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.input_offset_delay.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.input_offset_delay.valueChanged.connect(self.setOffsetDelay)
|
||||
self.input_offset_delay.setRange(-10e6, 10e6)
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from NanoVNASaver.Windows.Defaults import make_scrollable
|
||||
from NanoVNASaver.Windows.Screenshot import ScreenshotWindow
|
||||
|
@ -34,7 +34,7 @@ class DeviceSettingsWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Device settings")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
self.label = {
|
||||
"status": QtWidgets.QLabel("Not connected."),
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
import logging
|
||||
from typing import List
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6.QtGui import QColorConstants
|
||||
|
||||
from NanoVNASaver import Defaults
|
||||
from NanoVNASaver.Charts.Chart import Chart, ChartColors
|
||||
|
@ -41,7 +42,7 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
self.marker_window = MarkerSettingsWindow(self.app)
|
||||
self.callback_params = {}
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
layout = QtWidgets.QHBoxLayout()
|
||||
make_scrollable(self, layout)
|
||||
|
@ -95,7 +96,7 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
self.pointSizeInput.setMinimum(1)
|
||||
self.pointSizeInput.setMaximum(10)
|
||||
self.pointSizeInput.setSuffix(" px")
|
||||
self.pointSizeInput.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.pointSizeInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.pointSizeInput.valueChanged.connect(self.changePointSize)
|
||||
display_options_layout.addRow("Point size", self.pointSizeInput)
|
||||
|
||||
|
@ -107,7 +108,7 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
self.lineThicknessInput.setMinimum(1)
|
||||
self.lineThicknessInput.setMaximum(10)
|
||||
self.lineThicknessInput.setSuffix(" px")
|
||||
self.lineThicknessInput.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.lineThicknessInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.lineThicknessInput.valueChanged.connect(self.changeLineThickness)
|
||||
display_options_layout.addRow("Line thickness", self.lineThicknessInput)
|
||||
|
||||
|
@ -119,7 +120,7 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
self.markerSizeInput.setMaximum(20)
|
||||
self.markerSizeInput.setSingleStep(2)
|
||||
self.markerSizeInput.setSuffix(" px")
|
||||
self.markerSizeInput.setAlignment(QtCore.Qt.AlignRight)
|
||||
self.markerSizeInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
|
||||
self.markerSizeInput.valueChanged.connect(self.changeMarkerSize)
|
||||
display_options_layout.addRow("Marker size", self.markerSizeInput)
|
||||
|
||||
|
@ -452,7 +453,9 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
self.callback_params[cp] = (setting, attr)
|
||||
cp.clicked.connect(self.setColor)
|
||||
p = cp.palette()
|
||||
p.setColor(QtGui.QPalette.ButtonText, getattr(Chart.color, attr))
|
||||
p.setColor(
|
||||
QtGui.QPalette.ColorRole.ButtonText, getattr(Chart.color, attr)
|
||||
)
|
||||
cp.setPalette(p)
|
||||
return cp
|
||||
|
||||
|
@ -526,13 +529,13 @@ class DisplaySettingsWindow(QtWidgets.QWidget):
|
|||
def changeDarkMode(self):
|
||||
state = self.dark_mode_option.isChecked()
|
||||
Defaults.cfg.gui.dark_mode = bool(state)
|
||||
Chart.color.foreground = QtGui.QColor(QtCore.Qt.lightGray)
|
||||
Chart.color.foreground = QtGui.QColor(QColorConstants.LightGray)
|
||||
if state:
|
||||
Chart.color.background = QtGui.QColor(QtCore.Qt.black)
|
||||
Chart.color.text = QtGui.QColor(QtCore.Qt.white)
|
||||
Chart.color.background = QtGui.QColor(QColorConstants.Black)
|
||||
Chart.color.text = QtGui.QColor(QColorConstants.White)
|
||||
else:
|
||||
Chart.color.background = QtGui.QColor(QtCore.Qt.white)
|
||||
Chart.color.text = QtGui.QColor(QtCore.Qt.black)
|
||||
Chart.color.background = QtGui.QColor(QColorConstants.White)
|
||||
Chart.color.text = QtGui.QColor(QColorConstants.Black)
|
||||
Chart.color.swr = Chart.color.swr
|
||||
self.updateCharts()
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from NanoVNASaver.Touchstone import Touchstone
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Windows.Defaults import make_scrollable
|
||||
|
@ -34,7 +34,7 @@ class FilesWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Files")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
self.setMinimumWidth(200)
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
file_window_layout = QtWidgets.QVBoxLayout()
|
||||
make_scrollable(self, file_window_layout)
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from NanoVNASaver.RFTools import Datapoint
|
||||
from NanoVNASaver.Marker.Widget import Marker
|
||||
|
@ -46,7 +47,7 @@ class MarkerSettingsWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Marker settings")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.cancelButtonClick)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.cancelButtonClick)
|
||||
|
||||
self.exampleMarker = Marker("Example marker")
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
|
@ -115,12 +116,12 @@ class MarkerSettingsWindow(QtWidgets.QWidget):
|
|||
self.exampleMarker.updateLabels(self.exampleData11, self.exampleData21)
|
||||
|
||||
def updateField(self, field: QtGui.QStandardItem):
|
||||
if field.checkState() == QtCore.Qt.Checked:
|
||||
if field.checkState() == Qt.CheckState.Checked:
|
||||
if field.data() not in self.currentFieldSelection:
|
||||
self.currentFieldSelection = []
|
||||
for i in range(self.model.rowCount()):
|
||||
field = self.model.item(i, 0)
|
||||
if field.checkState() == QtCore.Qt.Checked:
|
||||
if field.checkState() == Qt.CheckState.Checked:
|
||||
self.currentFieldSelection.append(field.data())
|
||||
elif field.data() in self.currentFieldSelection:
|
||||
self.currentFieldSelection.remove(field.data())
|
||||
|
@ -161,7 +162,7 @@ class MarkerSettingsWindow(QtWidgets.QWidget):
|
|||
item.setCheckable(True)
|
||||
item.setEditable(False)
|
||||
if label.label_id in self.currentFieldSelection:
|
||||
item.setCheckState(QtCore.Qt.Checked)
|
||||
item.setCheckState(Qt.CheckState.Checked)
|
||||
self.model.appendRow(item)
|
||||
self.active_labels_view.setModel(self.model)
|
||||
self.model.itemChanged.connect(self.updateField)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
from PyQt5 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -30,18 +30,20 @@ class ScreenshotWindow(QtWidgets.QLabel):
|
|||
self.setWindowTitle("Screenshot")
|
||||
# TODO : self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
self.setContextMenuPolicy(
|
||||
QtCore.Qt.ContextMenuPolicy.ActionsContextMenu
|
||||
)
|
||||
|
||||
self.action_original_size = QtWidgets.QAction("Original size")
|
||||
self.action_original_size = QtGui.QAction("Original size")
|
||||
self.action_original_size.triggered.connect(lambda: self.setScale(1))
|
||||
self.action_2x_size = QtWidgets.QAction("2x size")
|
||||
self.action_2x_size = QtGui.QAction("2x size")
|
||||
self.action_2x_size.triggered.connect(lambda: self.setScale(2))
|
||||
self.action_3x_size = QtWidgets.QAction("3x size")
|
||||
self.action_3x_size = QtGui.QAction("3x size")
|
||||
self.action_3x_size.triggered.connect(lambda: self.setScale(3))
|
||||
self.action_4x_size = QtWidgets.QAction("4x size")
|
||||
self.action_4x_size = QtGui.QAction("4x size")
|
||||
self.action_4x_size.triggered.connect(lambda: self.setScale(4))
|
||||
self.action_5x_size = QtWidgets.QAction("5x size")
|
||||
self.action_5x_size = QtGui.QAction("5x size")
|
||||
self.action_5x_size.triggered.connect(lambda: self.setScale(5))
|
||||
|
||||
self.addAction(self.action_original_size)
|
||||
|
@ -49,7 +51,7 @@ class ScreenshotWindow(QtWidgets.QLabel):
|
|||
self.addAction(self.action_3x_size)
|
||||
self.addAction(self.action_4x_size)
|
||||
self.addAction(self.action_5x_size)
|
||||
self.action_save_screenshot = QtWidgets.QAction("Save image")
|
||||
self.action_save_screenshot = QtGui.QAction("Save image")
|
||||
self.action_save_screenshot.triggered.connect(self.saveScreenshot)
|
||||
self.addAction(self.action_save_screenshot)
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
import logging
|
||||
from functools import partial
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from NanoVNASaver.Formatting import (
|
||||
format_frequency_short,
|
||||
|
@ -39,7 +40,7 @@ class SweepSettingsWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("Sweep settings")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout()
|
||||
make_scrollable(self, layout)
|
||||
|
@ -114,7 +115,11 @@ class SweepSettingsWindow(QtWidgets.QWidget):
|
|||
layout.addRow(label)
|
||||
checkbox = QtWidgets.QCheckBox("Logarithmic sweep")
|
||||
checkbox.setMinimumHeight(20)
|
||||
checkbox.setCheckState(self.app.sweep.properties.logarithmic)
|
||||
checkbox.setCheckState(
|
||||
Qt.CheckState.Checked
|
||||
if self.app.sweep.properties.logarithmic
|
||||
else Qt.CheckState.Unchecked
|
||||
)
|
||||
checkbox.toggled.connect(
|
||||
lambda: self.update_logarithmic(checkbox.isChecked())
|
||||
)
|
||||
|
@ -224,12 +229,12 @@ class SweepSettingsWindow(QtWidgets.QWidget):
|
|||
)
|
||||
start = int(
|
||||
self.band_list.model()
|
||||
.data(index_start, QtCore.Qt.ItemDataRole)
|
||||
.data(index_start, Qt.ItemDataRole.EditRole)
|
||||
.value()
|
||||
)
|
||||
stop = int(
|
||||
self.band_list.model()
|
||||
.data(index_stop, QtCore.Qt.ItemDataRole)
|
||||
.data(index_stop, Qt.ItemDataRole.EditRole)
|
||||
.value()
|
||||
)
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import numpy as np
|
|||
from scipy.signal import convolve
|
||||
from scipy.constants import speed_of_light
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from NanoVNASaver.Windows.Defaults import make_scrollable
|
||||
|
||||
|
@ -84,7 +84,7 @@ class TDRWindow(QtWidgets.QWidget):
|
|||
self.setWindowTitle("TDR")
|
||||
self.setWindowIcon(self.app.icon)
|
||||
|
||||
QtWidgets.QShortcut(QtCore.Qt.Key_Escape, self, self.hide)
|
||||
QtGui.QShortcut(QtCore.Qt.Key.Key_Escape, self, self.hide)
|
||||
|
||||
layout = QtWidgets.QFormLayout()
|
||||
make_scrollable(self, layout)
|
||||
|
|
|
@ -30,7 +30,7 @@ import argparse
|
|||
import logging
|
||||
import sys
|
||||
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt6 import QtWidgets
|
||||
|
||||
from NanoVNASaver.About import VERSION, INFO
|
||||
from NanoVNASaver.NanoVNASaver import NanoVNASaver
|
||||
|
@ -90,7 +90,6 @@ def main():
|
|||
|
||||
logger.info("Startup...")
|
||||
|
||||
QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
window = NanoVNASaver()
|
||||
window.show()
|
||||
|
@ -106,7 +105,7 @@ def main():
|
|||
window.setReference(t.s11, t.s21, args.ref_file)
|
||||
window.dataUpdated()
|
||||
try:
|
||||
app.exec_()
|
||||
app.exec()
|
||||
except BaseException as exc:
|
||||
logger.exception("%s", exc)
|
||||
raise exc
|
||||
|
|
Ładowanie…
Reference in New Issue