[pyside] switch to pyside instead of pyqt
This commit is contained in:
parent
5dd44512df
commit
4e7ddd468c
@ -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
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
6
main.py
6
main.py
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user