diff --git a/.pylintrc b/.pylintrc index a4e2e2c..97ac9fb 100644 --- a/.pylintrc +++ b/.pylintrc @@ -17,4 +17,4 @@ min-public-methods=0 max-attributes=14 [MASTER] -extension-pkg-whitelist=PyQt5 +extension-pkg-whitelist=PyQt6 diff --git a/Makefile b/Makefile index 640178d..c169136 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ check: check-mypy check-flake8 check-pylint check-unit @echo "make check: ok" check-mypy: $(PYTHON_OBJECTS) Makefile requirements.txt - env PYTHONPATH=.:tests mypy --python-version 3.8 --strict --no-error-summary $(PYTHON_OBJECTS) && touch $@ + env PYTHONPATH=.:tests mypy --python-version 3.11 --strict --no-error-summary $(PYTHON_OBJECTS) && touch $@ check-flake8: $(patsubst %.py,%.flake8,$(PYTHON_OBJECTS)) diff --git a/qged2dot.py b/qged2dot.py index 3dd52cf..10d88f2 100755 --- a/qged2dot.py +++ b/qged2dot.py @@ -7,29 +7,27 @@ """Qt-based GUI for ged2dot.""" -from typing import cast import io import os import sys import traceback import webbrowser -from PyQt5 import QtGui -from PyQt5.QtCore import pyqtBoundSignal -from PyQt5.QtWidgets import QApplication -from PyQt5.QtWidgets import QCheckBox -from PyQt5.QtWidgets import QComboBox -from PyQt5.QtWidgets import QDialogButtonBox -from PyQt5.QtWidgets import QFileDialog -from PyQt5.QtWidgets import QGridLayout -from PyQt5.QtWidgets import QLabel -from PyQt5.QtWidgets import QLineEdit -from PyQt5.QtWidgets import QMessageBox -from PyQt5.QtWidgets import QPushButton -from PyQt5.QtWidgets import QSpinBox -from PyQt5.QtWidgets import QStatusBar -from PyQt5.QtWidgets import QVBoxLayout -from PyQt5.QtWidgets import QWidget +from PyQt6 import QtGui +from PyQt6.QtWidgets import QApplication +from PyQt6.QtWidgets import QCheckBox +from PyQt6.QtWidgets import QComboBox +from PyQt6.QtWidgets import QDialogButtonBox +from PyQt6.QtWidgets import QFileDialog +from PyQt6.QtWidgets import QGridLayout +from PyQt6.QtWidgets import QLabel +from PyQt6.QtWidgets import QLineEdit +from PyQt6.QtWidgets import QMessageBox +from PyQt6.QtWidgets import QPushButton +from PyQt6.QtWidgets import QSpinBox +from PyQt6.QtWidgets import QStatusBar +from PyQt6.QtWidgets import QVBoxLayout +from PyQt6.QtWidgets import QWidget import pygraphviz # type: ignore import ged2dot @@ -186,8 +184,7 @@ def setup_input(self) -> None: self.grid_layout.addWidget(self.widgets.input_value, 0, 1) input_button = QPushButton(self.window) input_button.setText("Browse...") - # pylint: disable=no-value-for-parameter - cast(pyqtBoundSignal, input_button.clicked).connect(self.widgets.set_input) + input_button.clicked.connect(self.widgets.set_input) self.grid_layout.addWidget(input_button, 0, 2) def setup_output(self) -> None: @@ -198,8 +195,7 @@ def setup_output(self) -> None: self.grid_layout.addWidget(self.widgets.output_value, 1, 1) output_button = QPushButton(self.window) output_button.setText("Browse...") - # pylint: disable=no-value-for-parameter - cast(pyqtBoundSignal, output_button.clicked).connect(self.widgets.set_output) + output_button.clicked.connect(self.widgets.set_output) self.grid_layout.addWidget(output_button, 1, 2) def setup_rootfamily(self) -> None: @@ -225,8 +221,7 @@ def setup_imagedir(self) -> None: self.grid_layout.addWidget(self.widgets.imagedir_value, 4, 1) imagedir_button = QPushButton(self.window) imagedir_button.setText("Browse...") - # pylint: disable=no-value-for-parameter - cast(pyqtBoundSignal, imagedir_button.clicked).connect(self.widgets.set_imagedir) + imagedir_button.clicked.connect(self.widgets.set_imagedir) self.grid_layout.addWidget(imagedir_button, 4, 2) def setup_nameorder(self) -> None: @@ -261,20 +256,15 @@ def main() -> None: app.layout.addLayout(app.grid_layout) button_box = QDialogButtonBox() - standard_buttons = cast( - QDialogButtonBox.StandardButtons, - QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel # pylint: disable=no-member - ) + standard_buttons = QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel button_box.setStandardButtons(standard_buttons) app.layout.addWidget(button_box) - cast( - pyqtBoundSignal, - button_box.button(QDialogButtonBox.StandardButton.Cancel).clicked # pylint: disable=no-member - ).connect(sys.exit) - cast( - pyqtBoundSignal, - button_box.button(QDialogButtonBox.StandardButton.Ok).clicked # pylint: disable=no-member - ).connect(app.widgets.convert) + cancel_button = button_box.button(QDialogButtonBox.StandardButton.Cancel) + assert cancel_button + cancel_button.clicked.connect(sys.exit) + ok_button = button_box.button(QDialogButtonBox.StandardButton.Ok) + assert ok_button + ok_button.clicked.connect(app.widgets.convert) app.layout.addWidget(app.widgets.statusbar) app.widgets.update_status() diff --git a/requirements.txt b/requirements.txt index 18a71b1..2a1b91e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,4 @@ mypy==1.8.0 pygraphviz==1.12 pyinstaller==6.3.0 pylint==3.0.3 -pyqt5==5.15.7 +pyqt6==6.6.1 diff --git a/tools/ci-build.sh b/tools/ci-build.sh index 3b9f151..9339831 100755 --- a/tools/ci-build.sh +++ b/tools/ci-build.sh @@ -26,6 +26,8 @@ if [ "$GITHUB_JOB" == "macos" ]; then python3 -c 'import sys; assert sys.version_info.major == 3; assert sys.version_info.minor == 11' elif [ -n "$GITHUB_JOB" ]; then sudo apt-get install graphviz graphviz-dev + # for pylint and pyqt6 + sudo apt-get install xorg libxkbcommon0 fi cd tools