From f477a591c26e2737283d766cd40186bfdf546feb Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson <oscar.gustafsson@gmail.com> Date: Mon, 30 Jan 2023 21:57:21 +0100 Subject: [PATCH] Add testing with pyqt5 --- .gitlab-ci.yml | 58 +++++++++++++++++++++++--- b_asic/GUI/drag_button.py | 5 ++- b_asic/GUI/main_window.py | 3 +- b_asic/scheduler_gui/axes_item.py | 4 +- b_asic/scheduler_gui/main_window.ui | 4 +- b_asic/scheduler_gui/ui_main_window.py | 5 +-- pyproject.toml | 8 ++-- requirements.txt | 8 +++- requirements_test.txt | 1 + 9 files changed, 74 insertions(+), 22 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5da3c2d7..3c1b5250 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,12 @@ before_script: - apt-get install --yes build-essential cmake libfmt-dev pybind11-dev graphviz python3-pyqt5 xvfb xdg-utils lcov - python -m pip install --upgrade pip - python --version - - pip install pytest pytest-cov sphinx furo numpydoc pytest-xvfb pytest-qt setuptools_scm sphinx-qt-documentation pytest-xdist pytest-mpl + - pip install -r requirements.txt + - pip install -r requirements_doc.txt + - pip install -r requirements_test.txt + - pip install $QT_API + - export PYTEST_QT_API=$QT_API + - export QT_API=$QT_API # - export CXXFLAGS='--coverage' - pip install -ve . # Move file, but should be handled by installation @@ -17,7 +22,7 @@ before_script: .run-test: stage: test script: - - pytest --cov=b_asic --cov-report=xml:cov.xml --cov-report=term --color=yes test --mpl + - pytest --cov=b_asic --cov-report=xml:cov.xml --cov-report=term --color=yes test --mpl --timeout=20 --durations=10 # - lcov --capture --directory . --output-file coverage.info # - lcov --output-file coverage.info --extract coverage.info $PWD/src/'*' $PWD/b_asic/'*' # - lcov --list coverage.info @@ -30,19 +35,60 @@ before_script: coverage: /(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/ -run-test-3.8: +run-test-3.8-pyside2: + variables: + QT_API: pyside2 image: python:3.8 extends: ".run-test" -run-test-3.9: +run-test-3.8-pyqt5: + variables: + QT_API: pyqt5 + image: python:3.8 + extends: ".run-test" + +run-test-3.9-pyside2: + variables: + QT_API: pyside2 + image: python:3.9 + extends: ".run-test" + +run-test-3.9-pyqt5: + variables: + QT_API: pyqt5 image: python:3.9 extends: ".run-test" -run-test-3.10: +run-test-3.10-pyside2: + variables: + QT_API: pyside2 image: python:3.10 extends: ".run-test" +run-test-3.10-pyqt5: + variables: + QT_API: pyqt5 + image: python:3.10 + extends: ".run-test" + +# Seemingly works with Qt6, but tests stall on closing scheduler GUI due to modal dialog(?) +#run-test-3.10-pyside6: +# variables: +# QT_API: pyside6 +# image: python:3.10 +# extends: ".run-test" +# allow_failure: true +# +#run-test-3.10-pyqt6: +# variables: +# QT_API: pyqt6 +# image: python:3.10 +# extends: ".run-test" +# allow_failure: true + run-doc-test: + variables: + QT_API: pyside2 image: python:3.10 stage: test script: @@ -53,6 +99,8 @@ run-doc-test: # extends: ".run-test" pages: + variables: + QT_API: pyqt5 stage: deploy image: python:3.10 script: diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py index a07f0e79..9652b8a3 100644 --- a/b_asic/GUI/drag_button.py +++ b/b_asic/GUI/drag_button.py @@ -83,8 +83,9 @@ class DragButton(QPushButton): def mousePressEvent(self, event): if event.button() == Qt.MouseButton.LeftButton: self._m_press = True - self._mouse_press_pos = event.pos() - self._mouse_move_pos = event.pos() + pos = event.pos() + self._mouse_press_pos = pos + self._mouse_move_pos = pos super().mousePressEvent(event) diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index 0a9cc982..942bcd5b 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -16,6 +16,7 @@ from qtpy.QtWidgets import ( QAction, QApplication, QFileDialog, + QGraphicsItem, QGraphicsScene, QGraphicsTextItem, QGraphicsView, @@ -527,7 +528,7 @@ class MainWindow(QMainWindow): attr_button_scene.moveBy( int(self.scene.width() / 4), int(self.scene.height() / 4) ) - attr_button_scene.setFlag(attr_button_scene.ItemIsSelectable, True) + attr_button_scene.setFlag(QGraphicsItem.ItemIsSelectable, True) operation_label = QGraphicsTextItem(op.name, attr_button_scene) if not self.is_show_names: operation_label.setOpacity(0) diff --git a/b_asic/scheduler_gui/axes_item.py b/b_asic/scheduler_gui/axes_item.py index 39bb40a0..adea4568 100644 --- a/b_asic/scheduler_gui/axes_item.py +++ b/b_asic/scheduler_gui/axes_item.py @@ -9,7 +9,7 @@ from math import pi, sin from typing import List, Optional, Union # QGraphics and QPainter imports -from qtpy.QtCore import QPoint, QPointF, Qt +from qtpy.QtCore import QPointF, Qt from qtpy.QtGui import QBrush, QPen, QPolygonF from qtpy.QtWidgets import ( QGraphicsItem, @@ -318,7 +318,7 @@ class AxesItem(QGraphicsItemGroup): self._append_x_tick() pos = self._x_ledger[-1].pos() self._x_ledger[-1].setPos( - pos + QPoint(self._width, 0) + pos + QPointF(self._width, 0) ) # move timeline # y-axis diff --git a/b_asic/scheduler_gui/main_window.ui b/b_asic/scheduler_gui/main_window.ui index ca6fcd2c..38ac4579 100644 --- a/b_asic/scheduler_gui/main_window.ui +++ b/b_asic/scheduler_gui/main_window.ui @@ -57,7 +57,7 @@ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> </property> <property name="renderHints"> - <set>QPainter::HighQualityAntialiasing|QPainter::TextAntialiasing</set> + <set>QPainter::Antialiasing|QPainter::TextAntialiasing</set> </property> <property name="viewportUpdateMode"> <enum>QGraphicsView::FullViewportUpdate</enum> @@ -126,7 +126,6 @@ </property> <property name="font"> <font> - <weight>75</weight> <bold>true</bold> </font> </property> @@ -158,7 +157,6 @@ </property> <property name="font"> <font> - <weight>75</weight> <bold>true</bold> </font> </property> diff --git a/b_asic/scheduler_gui/ui_main_window.py b/b_asic/scheduler_gui/ui_main_window.py index f197afcd..3364516c 100644 --- a/b_asic/scheduler_gui/ui_main_window.py +++ b/b_asic/scheduler_gui/ui_main_window.py @@ -55,8 +55,7 @@ class Ui_MainWindow(object): QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop ) self.view.setRenderHints( - QtGui.QPainter.HighQualityAntialiasing - | QtGui.QPainter.TextAntialiasing + QtGui.QPainter.Antialiasing | QtGui.QPainter.TextAntialiasing ) self.view.setViewportUpdateMode( QtWidgets.QGraphicsView.FullViewportUpdate @@ -89,7 +88,6 @@ class Ui_MainWindow(object): item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setBold(True) - font.setWeight(75) item.setFont(font) brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) brush.setStyle(QtCore.Qt.SolidPattern) @@ -108,7 +106,6 @@ class Ui_MainWindow(object): item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setBold(True) - font.setWeight(75) item.setFont(font) brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) brush.setStyle(QtCore.Qt.SolidPattern) diff --git a/pyproject.toml b/pyproject.toml index 32b7026b..261237dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ requires-python = ">=3.8" dependencies = [ "numpy", "pybind11>=2.3.0", - "pyside2", + # "pyside2", "qtpy", "graphviz>=0.19", "matplotlib", @@ -22,7 +22,7 @@ classifiers = [ "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", +# "Programming Language :: Python :: 3.11", "Programming Language :: C++", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", @@ -56,7 +56,7 @@ skip-string-normalization = true preview = true line-length = 79 exclude = [ - "test/test_gui" + "test/test_gui", "b_asic/scheduler_gui/ui_main_window.py" ] [tool.isort] @@ -64,7 +64,7 @@ profile = "black" line_length = 79 src_paths = ["b_asic", "test"] skip = [ - "test/test_gui" + "test/test_gui", "b_asic/scheduler_gui/ui_main_window.py" ] diff --git a/requirements.txt b/requirements.txt index cba8d886..795bffa6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,7 @@ -setuptools_scm +setuptools_scm[toml]>=6.2 +numpy +pybind11>=2.3.0 +# pyside2 +qtpy +graphviz>=0.19 +matplotlib diff --git a/requirements_test.txt b/requirements_test.txt index 64543e50..bd51fe89 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -2,5 +2,6 @@ pytest pytest-cov pytest-qt pytest-mpl +pytest-timeout pytest-xvfb pytest-xdist -- GitLab