From b768a8e01b2ec281eccb2c3ce26f4b33c9397510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20M=C3=BCller?= Date: Sun, 12 Mar 2023 08:02:58 +0100 Subject: [PATCH] pyqt6 --- .pylintrc | 2 +- README.rst | 2 +- requirements.txt | 2 +- setup.cfg | 2 +- src/NanoVNASaver/Analysis/AntennaAnalysis.py | 2 +- src/NanoVNASaver/Analysis/BandPassAnalysis.py | 2 +- src/NanoVNASaver/Analysis/Base.py | 4 +- src/NanoVNASaver/Analysis/EFHWAnalysis.py | 2 +- src/NanoVNASaver/Analysis/HighPassAnalysis.py | 2 +- .../Analysis/PeakSearchAnalysis.py | 2 +- .../Analysis/ResonanceAnalysis.py | 2 +- .../Analysis/SimplePeakSearchAnalysis.py | 2 +- src/NanoVNASaver/Analysis/VSWRAnalysis.py | 2 +- src/NanoVNASaver/Charts/CLogMag.py | 2 +- src/NanoVNASaver/Charts/Chart.py | 48 ++++++----- src/NanoVNASaver/Charts/Frequency.py | 85 +++++++++---------- src/NanoVNASaver/Charts/GroupDelay.py | 2 +- src/NanoVNASaver/Charts/LogMag.py | 2 +- src/NanoVNASaver/Charts/Magnitude.py | 2 +- src/NanoVNASaver/Charts/MagnitudeZ.py | 2 +- src/NanoVNASaver/Charts/Permeability.py | 2 +- src/NanoVNASaver/Charts/Phase.py | 4 +- src/NanoVNASaver/Charts/Polar.py | 2 +- src/NanoVNASaver/Charts/QFactor.py | 2 +- src/NanoVNASaver/Charts/RI.py | 8 +- src/NanoVNASaver/Charts/RIMu.py | 18 ++-- src/NanoVNASaver/Charts/RIZ.py | 10 +-- src/NanoVNASaver/Charts/SParam.py | 2 +- src/NanoVNASaver/Charts/Smith.py | 2 +- src/NanoVNASaver/Charts/Square.py | 13 +-- src/NanoVNASaver/Charts/TDR.py | 55 ++++++------ src/NanoVNASaver/Charts/VSWR.py | 2 +- src/NanoVNASaver/Controls/Control.py | 2 +- src/NanoVNASaver/Controls/MarkerControl.py | 10 ++- src/NanoVNASaver/Controls/SerialControl.py | 2 +- src/NanoVNASaver/Controls/SweepControl.py | 23 ++--- src/NanoVNASaver/Defaults.py | 22 ++--- src/NanoVNASaver/Hardware/NanoVNA.py | 2 +- src/NanoVNASaver/Hardware/NanoVNA_F_V2.py | 2 +- src/NanoVNASaver/Hardware/TinySA.py | 2 +- src/NanoVNASaver/Hardware/VNA.py | 2 +- src/NanoVNASaver/Inputs.py | 2 +- src/NanoVNASaver/Marker/Delta.py | 2 +- src/NanoVNASaver/Marker/Widget.py | 20 +++-- src/NanoVNASaver/NanoVNASaver.py | 24 +++--- src/NanoVNASaver/Settings/Bands.py | 37 ++++---- src/NanoVNASaver/SweepWorker.py | 4 +- src/NanoVNASaver/Windows/About.py | 4 +- src/NanoVNASaver/Windows/AnalysisWindow.py | 13 +-- src/NanoVNASaver/Windows/Bands.py | 4 +- .../Windows/CalibrationSettings.py | 10 +-- src/NanoVNASaver/Windows/Defaults.py | 2 +- src/NanoVNASaver/Windows/DeviceSettings.py | 4 +- src/NanoVNASaver/Windows/DisplaySettings.py | 25 +++--- src/NanoVNASaver/Windows/Files.py | 4 +- src/NanoVNASaver/Windows/MarkerSettings.py | 11 +-- src/NanoVNASaver/Windows/Screenshot.py | 20 +++-- src/NanoVNASaver/Windows/SweepSettings.py | 15 ++-- src/NanoVNASaver/Windows/TDR.py | 4 +- src/NanoVNASaver/__main__.py | 5 +- 60 files changed, 296 insertions(+), 272 deletions(-) diff --git a/.pylintrc b/.pylintrc index 79967d9..5137539 100644 --- a/.pylintrc +++ b/.pylintrc @@ -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 diff --git a/README.rst b/README.rst index 8598865..db411cb 100644 --- a/README.rst +++ b/README.rst @@ -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 diff --git a/requirements.txt b/requirements.txt index 5ffa88a..4270720 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 diff --git a/setup.cfg b/setup.cfg index 9885c0d..25a30d3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -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 diff --git a/src/NanoVNASaver/Analysis/AntennaAnalysis.py b/src/NanoVNASaver/Analysis/AntennaAnalysis.py index 248f114..41e2fb4 100644 --- a/src/NanoVNASaver/Analysis/AntennaAnalysis.py +++ b/src/NanoVNASaver/Analysis/AntennaAnalysis.py @@ -21,7 +21,7 @@ import logging from time import sleep -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets from NanoVNASaver.Analysis.VSWRAnalysis import VSWRAnalysis diff --git a/src/NanoVNASaver/Analysis/BandPassAnalysis.py b/src/NanoVNASaver/Analysis/BandPassAnalysis.py index 461f8ef..dfb362e 100644 --- a/src/NanoVNASaver/Analysis/BandPassAnalysis.py +++ b/src/NanoVNASaver/Analysis/BandPassAnalysis.py @@ -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 diff --git a/src/NanoVNASaver/Analysis/Base.py b/src/NanoVNASaver/Analysis/Base.py index a47cae2..db7e77b 100644 --- a/src/NanoVNASaver/Analysis/Base.py +++ b/src/NanoVNASaver/Analysis/Base.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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: diff --git a/src/NanoVNASaver/Analysis/EFHWAnalysis.py b/src/NanoVNASaver/Analysis/EFHWAnalysis.py index 37d7517..4b2e38a 100644 --- a/src/NanoVNASaver/Analysis/EFHWAnalysis.py +++ b/src/NanoVNASaver/Analysis/EFHWAnalysis.py @@ -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 ( diff --git a/src/NanoVNASaver/Analysis/HighPassAnalysis.py b/src/NanoVNASaver/Analysis/HighPassAnalysis.py index fd4419f..4ae3c8a 100644 --- a/src/NanoVNASaver/Analysis/HighPassAnalysis.py +++ b/src/NanoVNASaver/Analysis/HighPassAnalysis.py @@ -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 diff --git a/src/NanoVNASaver/Analysis/PeakSearchAnalysis.py b/src/NanoVNASaver/Analysis/PeakSearchAnalysis.py index 815d988..4a58d4f 100644 --- a/src/NanoVNASaver/Analysis/PeakSearchAnalysis.py +++ b/src/NanoVNASaver/Analysis/PeakSearchAnalysis.py @@ -18,7 +18,7 @@ # along with this program. If not, see . import logging -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets import numpy as np # pylint: disable=import-error, no-name-in-module diff --git a/src/NanoVNASaver/Analysis/ResonanceAnalysis.py b/src/NanoVNASaver/Analysis/ResonanceAnalysis.py index b427067..d078a5f 100644 --- a/src/NanoVNASaver/Analysis/ResonanceAnalysis.py +++ b/src/NanoVNASaver/Analysis/ResonanceAnalysis.py @@ -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 diff --git a/src/NanoVNASaver/Analysis/SimplePeakSearchAnalysis.py b/src/NanoVNASaver/Analysis/SimplePeakSearchAnalysis.py index 91d4cb7..52bf25c 100644 --- a/src/NanoVNASaver/Analysis/SimplePeakSearchAnalysis.py +++ b/src/NanoVNASaver/Analysis/SimplePeakSearchAnalysis.py @@ -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 diff --git a/src/NanoVNASaver/Analysis/VSWRAnalysis.py b/src/NanoVNASaver/Analysis/VSWRAnalysis.py index 0081b49..23769e4 100644 --- a/src/NanoVNASaver/Analysis/VSWRAnalysis.py +++ b/src/NanoVNASaver/Analysis/VSWRAnalysis.py @@ -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 diff --git a/src/NanoVNASaver/Charts/CLogMag.py b/src/NanoVNASaver/Charts/CLogMag.py index dd45203..7db9a71 100644 --- a/src/NanoVNASaver/Charts/CLogMag.py +++ b/src/NanoVNASaver/Charts/CLogMag.py @@ -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 diff --git a/src/NanoVNASaver/Charts/Chart.py b/src/NanoVNASaver/Charts/Chart.py index 739858c..9674f5f 100644 --- a/src/NanoVNASaver/Charts/Chart.py +++ b/src/NanoVNASaver/Charts/Chart.py @@ -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() diff --git a/src/NanoVNASaver/Charts/Frequency.py b/src/NanoVNASaver/Charts/Frequency.py index dff4ad4..f9a2bd9 100644 --- a/src/NanoVNASaver/Charts/Frequency.py +++ b/src/NanoVNASaver/Charts/Frequency.py @@ -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) diff --git a/src/NanoVNASaver/Charts/GroupDelay.py b/src/NanoVNASaver/Charts/GroupDelay.py index 1ef3ad0..dc30390 100644 --- a/src/NanoVNASaver/Charts/GroupDelay.py +++ b/src/NanoVNASaver/Charts/GroupDelay.py @@ -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 diff --git a/src/NanoVNASaver/Charts/LogMag.py b/src/NanoVNASaver/Charts/LogMag.py index 5237d1c..c6736ba 100644 --- a/src/NanoVNASaver/Charts/LogMag.py +++ b/src/NanoVNASaver/Charts/LogMag.py @@ -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 diff --git a/src/NanoVNASaver/Charts/Magnitude.py b/src/NanoVNASaver/Charts/Magnitude.py index 15404c7..0f7a912 100644 --- a/src/NanoVNASaver/Charts/Magnitude.py +++ b/src/NanoVNASaver/Charts/Magnitude.py @@ -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 diff --git a/src/NanoVNASaver/Charts/MagnitudeZ.py b/src/NanoVNASaver/Charts/MagnitudeZ.py index 4e4fb85..32cd2d6 100644 --- a/src/NanoVNASaver/Charts/MagnitudeZ.py +++ b/src/NanoVNASaver/Charts/MagnitudeZ.py @@ -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 diff --git a/src/NanoVNASaver/Charts/Permeability.py b/src/NanoVNASaver/Charts/Permeability.py index 025e8a8..4b02858 100644 --- a/src/NanoVNASaver/Charts/Permeability.py +++ b/src/NanoVNASaver/Charts/Permeability.py @@ -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 diff --git a/src/NanoVNASaver/Charts/Phase.py b/src/NanoVNASaver/Charts/Phase.py index 6f93c35..18676c3 100644 --- a/src/NanoVNASaver/Charts/Phase.py +++ b/src/NanoVNASaver/Charts/Phase.py @@ -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()) diff --git a/src/NanoVNASaver/Charts/Polar.py b/src/NanoVNASaver/Charts/Polar.py index a3d9f0d..dde0894 100644 --- a/src/NanoVNASaver/Charts/Polar.py +++ b/src/NanoVNASaver/Charts/Polar.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging -from PyQt5 import QtGui, QtCore +from PyQt6 import QtGui, QtCore from NanoVNASaver.Charts.Chart import Chart from NanoVNASaver.Charts.Square import SquareChart diff --git a/src/NanoVNASaver/Charts/QFactor.py b/src/NanoVNASaver/Charts/QFactor.py index be14ab5..3986a96 100644 --- a/src/NanoVNASaver/Charts/QFactor.py +++ b/src/NanoVNASaver/Charts/QFactor.py @@ -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 diff --git a/src/NanoVNASaver/Charts/RI.py b/src/NanoVNASaver/Charts/RI.py index 9c875c3..a64fda0 100644 --- a/src/NanoVNASaver/Charts/RI.py +++ b/src/NanoVNASaver/Charts/RI.py @@ -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) diff --git a/src/NanoVNASaver/Charts/RIMu.py b/src/NanoVNASaver/Charts/RIMu.py index bdf88b8..321855a 100644 --- a/src/NanoVNASaver/Charts/RIMu.py +++ b/src/NanoVNASaver/Charts/RIMu.py @@ -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) diff --git a/src/NanoVNASaver/Charts/RIZ.py b/src/NanoVNASaver/Charts/RIZ.py index 42c3be9..5e97489 100644 --- a/src/NanoVNASaver/Charts/RIZ.py +++ b/src/NanoVNASaver/Charts/RIZ.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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( diff --git a/src/NanoVNASaver/Charts/SParam.py b/src/NanoVNASaver/Charts/SParam.py index 30363b8..09f6cb9 100644 --- a/src/NanoVNASaver/Charts/SParam.py +++ b/src/NanoVNASaver/Charts/SParam.py @@ -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 diff --git a/src/NanoVNASaver/Charts/Smith.py b/src/NanoVNASaver/Charts/Smith.py index 4009987..c37e842 100644 --- a/src/NanoVNASaver/Charts/Smith.py +++ b/src/NanoVNASaver/Charts/Smith.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging -from PyQt5 import QtGui, QtCore +from PyQt6 import QtGui, QtCore from NanoVNASaver.Charts.Chart import Chart from NanoVNASaver.Charts.Square import SquareChart diff --git a/src/NanoVNASaver/Charts/Square.py b/src/NanoVNASaver/Charts/Square.py index f654212..dd5ab16 100644 --- a/src/NanoVNASaver/Charts/Square.py +++ b/src/NanoVNASaver/Charts/Square.py @@ -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 ( diff --git a/src/NanoVNASaver/Charts/TDR.py b/src/NanoVNASaver/Charts/TDR.py index b0fe301..f66abe9 100644 --- a/src/NanoVNASaver/Charts/TDR.py +++ b/src/NanoVNASaver/Charts/TDR.py @@ -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() diff --git a/src/NanoVNASaver/Charts/VSWR.py b/src/NanoVNASaver/Charts/VSWR.py index cd3bf44..f0efe18 100644 --- a/src/NanoVNASaver/Charts/VSWR.py +++ b/src/NanoVNASaver/Charts/VSWR.py @@ -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 diff --git a/src/NanoVNASaver/Controls/Control.py b/src/NanoVNASaver/Controls/Control.py index a165f42..6ab4e85 100644 --- a/src/NanoVNASaver/Controls/Control.py +++ b/src/NanoVNASaver/Controls/Control.py @@ -18,7 +18,7 @@ # along with this program. If not, see . import logging -from PyQt5 import QtWidgets, QtCore +from PyQt6 import QtWidgets, QtCore logger = logging.getLogger(__name__) diff --git a/src/NanoVNASaver/Controls/MarkerControl.py b/src/NanoVNASaver/Controls/MarkerControl.py index 9172c5c..1282e02 100644 --- a/src/NanoVNASaver/Controls/MarkerControl.py +++ b/src/NanoVNASaver/Controls/MarkerControl.py @@ -18,8 +18,8 @@ # along with this program. If not, see . 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() diff --git a/src/NanoVNASaver/Controls/SerialControl.py b/src/NanoVNASaver/Controls/SerialControl.py index 4113510..1851dc5 100644 --- a/src/NanoVNASaver/Controls/SerialControl.py +++ b/src/NanoVNASaver/Controls/SerialControl.py @@ -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 diff --git a/src/NanoVNASaver/Controls/SweepControl.py b/src/NanoVNASaver/Controls/SweepControl.py index b32a969..2ce569a 100644 --- a/src/NanoVNASaver/Controls/SweepControl.py +++ b/src/NanoVNASaver/Controls/SweepControl.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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) diff --git a/src/NanoVNASaver/Defaults.py b/src/NanoVNASaver/Defaults.py index 38bcdd4..89caec1 100644 --- a/src/NanoVNASaver/Defaults.py +++ b/src/NanoVNASaver/Defaults.py @@ -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) ) diff --git a/src/NanoVNASaver/Hardware/NanoVNA.py b/src/NanoVNASaver/Hardware/NanoVNA.py index 15eae04..8937c16 100644 --- a/src/NanoVNASaver/Hardware/NanoVNA.py +++ b/src/NanoVNASaver/Hardware/NanoVNA.py @@ -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 diff --git a/src/NanoVNASaver/Hardware/NanoVNA_F_V2.py b/src/NanoVNASaver/Hardware/NanoVNA_F_V2.py index 4d4b9fa..1404bcc 100644 --- a/src/NanoVNASaver/Hardware/NanoVNA_F_V2.py +++ b/src/NanoVNASaver/Hardware/NanoVNA_F_V2.py @@ -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 diff --git a/src/NanoVNASaver/Hardware/TinySA.py b/src/NanoVNASaver/Hardware/TinySA.py index b2f7e34..8dfdfab 100644 --- a/src/NanoVNASaver/Hardware/TinySA.py +++ b/src/NanoVNASaver/Hardware/TinySA.py @@ -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 diff --git a/src/NanoVNASaver/Hardware/VNA.py b/src/NanoVNASaver/Hardware/VNA.py index 6434394..a429ebd 100644 --- a/src/NanoVNASaver/Hardware/VNA.py +++ b/src/NanoVNASaver/Hardware/VNA.py @@ -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 diff --git a/src/NanoVNASaver/Inputs.py b/src/NanoVNASaver/Inputs.py index 97c0d1c..13620cf 100644 --- a/src/NanoVNASaver/Inputs.py +++ b/src/NanoVNASaver/Inputs.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from PyQt5 import QtGui, QtWidgets, QtCore +from PyQt6 import QtGui, QtWidgets, QtCore from NanoVNASaver.Formatting import format_frequency_inputs diff --git a/src/NanoVNASaver/Marker/Delta.py b/src/NanoVNASaver/Marker/Delta.py index 7c2de90..604a37e 100644 --- a/src/NanoVNASaver/Marker/Delta.py +++ b/src/NanoVNASaver/Marker/Delta.py @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from PyQt5 import QtCore +from PyQt6 import QtCore from NanoVNASaver import RFTools from NanoVNASaver.Formatting import ( diff --git a/src/NanoVNASaver/Marker/Widget.py b/src/NanoVNASaver/Marker/Widget.py index 634c816..af518c3 100644 --- a/src/NanoVNASaver/Marker/Widget.py +++ b/src/NanoVNASaver/Marker/Widget.py @@ -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()}}};" diff --git a/src/NanoVNASaver/NanoVNASaver.py b/src/NanoVNASaver/NanoVNASaver.py index 21aa3f2..6f912bc 100644 --- a/src/NanoVNASaver/NanoVNASaver.py +++ b/src/NanoVNASaver/NanoVNASaver.py @@ -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, ) ) diff --git a/src/NanoVNASaver/Settings/Bands.py b/src/NanoVNASaver/Settings/Bands.py index fd18d5b..8242cbe 100644 --- a/src/NanoVNASaver/Settings/Bands.py +++ b/src/NanoVNASaver/Settings/Bands.py @@ -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) diff --git a/src/NanoVNASaver/SweepWorker.py b/src/NanoVNASaver/SweepWorker.py index e06b04d..f384682 100644 --- a/src/NanoVNASaver/SweepWorker.py +++ b/src/NanoVNASaver/SweepWorker.py @@ -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 diff --git a/src/NanoVNASaver/Windows/About.py b/src/NanoVNASaver/Windows/About.py index e65bedd..0fab6df 100644 --- a/src/NanoVNASaver/Windows/About.py +++ b/src/NanoVNASaver/Windows/About.py @@ -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) diff --git a/src/NanoVNASaver/Windows/AnalysisWindow.py b/src/NanoVNASaver/Windows/AnalysisWindow.py index b467a0a..05f743f 100644 --- a/src/NanoVNASaver/Windows/AnalysisWindow.py +++ b/src/NanoVNASaver/Windows/AnalysisWindow.py @@ -18,7 +18,8 @@ # along with this program. If not, see . 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: diff --git a/src/NanoVNASaver/Windows/Bands.py b/src/NanoVNASaver/Windows/Bands.py index fb4ded1..1b8b9c0 100644 --- a/src/NanoVNASaver/Windows/Bands.py +++ b/src/NanoVNASaver/Windows/Bands.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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) diff --git a/src/NanoVNASaver/Windows/CalibrationSettings.py b/src/NanoVNASaver/Windows/CalibrationSettings.py index 431b923..44266ae 100644 --- a/src/NanoVNASaver/Windows/CalibrationSettings.py +++ b/src/NanoVNASaver/Windows/CalibrationSettings.py @@ -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) diff --git a/src/NanoVNASaver/Windows/Defaults.py b/src/NanoVNASaver/Windows/Defaults.py index 2862f00..0e1f345 100644 --- a/src/NanoVNASaver/Windows/Defaults.py +++ b/src/NanoVNASaver/Windows/Defaults.py @@ -18,7 +18,7 @@ # along with this program. If not, see . import logging -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets logger = logging.getLogger(__name__) diff --git a/src/NanoVNASaver/Windows/DeviceSettings.py b/src/NanoVNASaver/Windows/DeviceSettings.py index 4b0b126..0a9673d 100644 --- a/src/NanoVNASaver/Windows/DeviceSettings.py +++ b/src/NanoVNASaver/Windows/DeviceSettings.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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."), diff --git a/src/NanoVNASaver/Windows/DisplaySettings.py b/src/NanoVNASaver/Windows/DisplaySettings.py index fdfd1c9..647c861 100644 --- a/src/NanoVNASaver/Windows/DisplaySettings.py +++ b/src/NanoVNASaver/Windows/DisplaySettings.py @@ -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() diff --git a/src/NanoVNASaver/Windows/Files.py b/src/NanoVNASaver/Windows/Files.py index 9a0627b..764ab00 100644 --- a/src/NanoVNASaver/Windows/Files.py +++ b/src/NanoVNASaver/Windows/Files.py @@ -18,7 +18,7 @@ # along with this program. If not, see . 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) diff --git a/src/NanoVNASaver/Windows/MarkerSettings.py b/src/NanoVNASaver/Windows/MarkerSettings.py index ff6bcd4..ad7f5f7 100644 --- a/src/NanoVNASaver/Windows/MarkerSettings.py +++ b/src/NanoVNASaver/Windows/MarkerSettings.py @@ -18,7 +18,8 @@ # along with this program. If not, see . 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) diff --git a/src/NanoVNASaver/Windows/Screenshot.py b/src/NanoVNASaver/Windows/Screenshot.py index 1ae20a2..29e6796 100644 --- a/src/NanoVNASaver/Windows/Screenshot.py +++ b/src/NanoVNASaver/Windows/Screenshot.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . 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) diff --git a/src/NanoVNASaver/Windows/SweepSettings.py b/src/NanoVNASaver/Windows/SweepSettings.py index 32a611e..1c013c3 100644 --- a/src/NanoVNASaver/Windows/SweepSettings.py +++ b/src/NanoVNASaver/Windows/SweepSettings.py @@ -18,7 +18,8 @@ # along with this program. If not, see . 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() ) diff --git a/src/NanoVNASaver/Windows/TDR.py b/src/NanoVNASaver/Windows/TDR.py index f94a746..a8c0304 100644 --- a/src/NanoVNASaver/Windows/TDR.py +++ b/src/NanoVNASaver/Windows/TDR.py @@ -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) diff --git a/src/NanoVNASaver/__main__.py b/src/NanoVNASaver/__main__.py index a45022f..9e18527 100644 --- a/src/NanoVNASaver/__main__.py +++ b/src/NanoVNASaver/__main__.py @@ -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