[pyside] switch to pyside instead of pyqt

This commit is contained in:
Jan Grewe 2025-01-21 09:06:23 +01:00
parent 5dd44512df
commit 4e7ddd468c
7 changed files with 37 additions and 39 deletions

View File

@ -1,6 +1,6 @@
import logging import logging
from PyQt6.QtWidgets import QWidget, QStackedLayout, QSizePolicy from PySide6.QtWidgets import QWidget, QStackedLayout, QSizePolicy
from PyQt6.QtCore import Qt from PySide6.QtCore import Qt
from fixtracks.taskwidgets import FixTracks from fixtracks.taskwidgets import FixTracks
from fixtracks.detectionmerge import MergeDetections from fixtracks.detectionmerge import MergeDetections

View File

@ -1,16 +1,15 @@
import logging import logging
from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QProgressBar from PySide6.QtCore import Qt, QThreadPool, Signal, Slot
from PyQt6.QtCore import QThreadPool, Qt, pyqtSignal, pyqtSlot from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QComboBox, QSizePolicy, QSpinBox, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QSpacerItem, QProgressDialog, QFileDialog
from PyQt6.QtGui import QImage, QPixmap, QColor, QPen from PySide6.QtGui import QImage, QPixmap, QColor, QPen
from fixtracks.util import ImageReader, DataFrameReader, Merger from fixtracks.util import ImageReader, DataFrameReader, Merger
from PyQt6.QtWidgets import QFileDialog
class VideoPreview(QWidget): class VideoPreview(QWidget):
def __init__(self, left=True, parent=None): def __init__(self, left=True, parent=None):
super().__init__(None) super().__init__(parent)
self._image = None self._image = None
self._line_pen = QPen(QColor.fromString("red"), 4) self._line_pen = QPen(QColor.fromString("red"), 4)
self._view = QGraphicsView() self._view = QGraphicsView()
@ -26,7 +25,7 @@ class VideoPreview(QWidget):
self._scene = QGraphicsScene() self._scene = QGraphicsScene()
self._pixmap = self._scene.addPixmap(QPixmap.fromImage(img)) self._pixmap = self._scene.addPixmap(QPixmap.fromImage(img))
self._view.setScene(self._scene) self._view.setScene(self._scene)
self._view.fitInView(self._scene.sceneRect(), mode=Qt.AspectRatioMode.KeepAspectRatio) self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
image_rect = self._pixmap.boundingRect() image_rect = self._pixmap.boundingRect()
start_x = image_rect.right() if self._left else image_rect.left() start_x = image_rect.right() if self._left else image_rect.left()
start_y = image_rect.top() start_y = image_rect.top()
@ -48,7 +47,7 @@ class VideoPreview(QWidget):
class MergeDetections(QWidget): class MergeDetections(QWidget):
back = pyqtSignal() back = Signal()
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
@ -276,7 +275,7 @@ class MergeDetections(QWidget):
self._progressDialog.setAutoClose(True) self._progressDialog.setAutoClose(True)
self._progressDialog.setRange(0, 100) self._progressDialog.setRange(0, 100)
self._progressDialog.setLabelText("Merging detections (will take a while, be patient):") self._progressDialog.setLabelText("Merging detections (will take a while, be patient):")
self._progressDialog.setCancelButtonText("Cancel") self._progressDialog.setCancelButtonText("Cancel")
self._progressDialog.setWindowModality(Qt.WindowModality.WindowModal) self._progressDialog.setWindowModality(Qt.WindowModality.WindowModal)
self._progressDialog.canceled.connect(self.on_mergeCancelled) self._progressDialog.canceled.connect(self.on_mergeCancelled)
self._progressDialog.show() self._progressDialog.show()
@ -284,19 +283,19 @@ class MergeDetections(QWidget):
self._merger.signals.finished.connect(self.on_mergeDone) self._merger.signals.finished.connect(self.on_mergeDone)
self.threadpool.start(self._merger) self.threadpool.start(self._merger)
@pyqtSlot() @Slot()
def on_mergeCancelled(self): def on_mergeCancelled(self):
logging.info("Cancel Button pressed! Requesting stop of merger") logging.info("Cancel Button pressed! Requesting stop of merger")
self._merger.stop_request() self._merger.stop_request()
self._saveBtn.setEnabled(False) self._saveBtn.setEnabled(False)
@pyqtSlot(float) @Slot(float)
def on_mergeProgress(self, value): def on_mergeProgress(self, value):
logging.debug(f"mergeProgress: {value * 100}%") logging.debug(f"mergeProgress: {value * 100}%")
if self._progressDialog is not None: if self._progressDialog is not None:
self._progressDialog.setValue(int(value * 100)) self._progressDialog.setValue(int(value * 100))
@pyqtSlot(bool) @Slot(bool)
def on_mergeDone(self, state): def on_mergeDone(self, state):
logging.debug("Merging stopped with status %s", state) logging.debug("Merging stopped with status %s", state)
if state: if state:
@ -310,7 +309,6 @@ class MergeDetections(QWidget):
# preview_enabled = self.left_videocombo.currentIndex() > 0 and self.right_videocombo.currentIndex() > 0 # preview_enabled = self.left_videocombo.currentIndex() > 0 and self.right_videocombo.currentIndex() > 0
# self._mergePreviewBtn.setEnabled(preview_enabled) # self._mergePreviewBtn.setEnabled(preview_enabled)
def on_save(self): def on_save(self):
logging.debug("Save merge results") logging.debug("Save merge results")
if self._merger is not None: if self._merger is not None:
@ -325,10 +323,10 @@ class MergeDetections(QWidget):
else: else:
logging.debug("Saving failed! Merger is None!") logging.debug("Saving failed! Merger is None!")
def on_back(self): def on_back(self):
logging.debug("Back button pressed!") logging.debug("Back button pressed!")
self._merger = None self._merger = None
self._left_data = None self._left_data = None
self._right_data = None self._right_data = None
self.back.emit() self.back.emit()

View File

@ -1,6 +1,6 @@
from PyQt6.QtCore import QSize, Qt from PySide6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QMainWindow, QWidget, QToolBar, QMenu, QMenuBar, QSizePolicy, QFileDialog from PySide6.QtWidgets import QMainWindow, QWidget, QToolBar, QMenu, QMenuBar, QSizePolicy, QFileDialog
from PyQt6.QtGui import QKeySequence, QAction, QIcon from PySide6.QtGui import QKeySequence, QAction, QIcon
from fixtracks.centralwidget import CentralWidget from fixtracks.centralwidget import CentralWidget

View File

@ -1,13 +1,13 @@
import logging import logging
import pathlib import pathlib
from PyQt6.QtWidgets import QWidget, QPushButton, QFileDialog, QSizePolicy, QGridLayout from PySide6.QtWidgets import QWidget, QPushButton, QFileDialog, QSizePolicy, QGridLayout
from PyQt6.QtCore import pyqtSignal, Qt, QSize from PySide6.QtCore import Signal, Qt, QSize
from PyQt6.QtGui import QIcon, QAction, QPixmap from PySide6.QtGui import QIcon, QAction, QPixmap
class TasksWidget(QWidget): class TasksWidget(QWidget):
clicked = pyqtSignal((str,)) clicked = Signal((str,))
def __init__(self, parent = None): def __init__(self, parent = None):
super().__init__(parent) super().__init__(parent)

View File

@ -1,8 +1,8 @@
import logging import logging
from PyQt6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QHBoxLayout, QComboBox, QSizePolicy from PySide6.QtWidgets import QWidget, QGridLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QHBoxLayout, QComboBox, QSizePolicy
from PyQt6.QtCore import QThreadPool from PySide6.QtCore import QThreadPool
from PyQt6.QtGui import QImage, QPixmap from PySide6.QtGui import QImage, QPixmap
from fixtracks.util import ImageReader from fixtracks.util import ImageReader

View File

@ -4,21 +4,21 @@ import cv2 as cv
import time import time
import pickle import pickle
import numpy as np import numpy as np
from PyQt6.QtCore import QRunnable, pyqtSlot, pyqtSignal, QObject from PySide6.QtCore import QRunnable, Signal, QObject, Slot
from IPython import embed from IPython import embed
class ProducerSignals(QObject): class ProducerSignals(QObject):
finished = pyqtSignal(bool) finished = Signal(bool)
error = pyqtSignal(str) error = Signal(str)
# start = pyqtSignal(float) # start = pyqtSignal(float)
# running = pyqtSignal() # running = pyqtSignal()
progress = pyqtSignal(float) progress = Signal(float)
progress2 = pyqtSignal((str, float, float)) progress2 = Signal((str, float, float))
class ImageReader(QRunnable): class ImageReader(QRunnable):
finished = pyqtSignal(bool) finished = Signal(bool)
def __init__(self, filename, frame=1000) -> None: def __init__(self, filename, frame=1000) -> None:
super().__init__() super().__init__()
@ -27,7 +27,7 @@ class ImageReader(QRunnable):
self._signals = ProducerSignals() self._signals = ProducerSignals()
self._frame = None self._frame = None
@pyqtSlot() @Slot()
def run(self): def run(self):
''' '''
Your code goes in this function Your code goes in this function
@ -62,7 +62,7 @@ class ImageReader(QRunnable):
class DataFrameReader(QRunnable): class DataFrameReader(QRunnable):
finished = pyqtSignal(bool) finished = Signal(bool)
def __init__(self, filename) -> None: def __init__(self, filename) -> None:
super().__init__() super().__init__()
@ -70,7 +70,7 @@ class DataFrameReader(QRunnable):
self._signals = ProducerSignals() self._signals = ProducerSignals()
self._dataframe = None self._dataframe = None
@pyqtSlot() @Slot()
def run(self): def run(self):
''' '''
Your code goes in this function Your code goes in this function
@ -244,11 +244,11 @@ class Merger(QRunnable):
with open(filename, 'wb') as f: with open(filename, 'wb') as f:
pickle.dump(self._merged, f) pickle.dump(self._merged, f)
@pyqtSlot() @Slot()
def stop_request(self): def stop_request(self):
self._stopRequest = True self._stopRequest = True
@pyqtSlot() @Slot()
def run(self): def run(self):
logging.info("Cutting left detections to limit %i", self._left_cut) logging.info("Cutting left detections to limit %i", self._left_cut)
self.signals.progress.emit(0.0) self.signals.progress.emit(0.0)

View File

@ -5,9 +5,9 @@ pyside6-rcc resources.qrc -o resources.py
import sys import sys
import platform import platform
import logging import logging
from PyQt6.QtWidgets import QApplication from PySide6.QtWidgets import QApplication
from PyQt6.QtCore import QSettings from PySide6.QtCore import QSettings
from PyQt6.QtGui import QIcon from PySide6.QtGui import QIcon
from fixtracks import fixtracks, info from fixtracks import fixtracks, info