[centralwidget] different layout of the tasks, new icons
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
@ -7,7 +7,7 @@
|
|||||||
<file alias="close">icons/nix_close.png</file>
|
<file alias="close">icons/nix_close.png</file>
|
||||||
<file alias="open_light">icons/open_light.png</file>
|
<file alias="open_light">icons/open_light.png</file>
|
||||||
<file alias="open_dark">icons/open_dark.png</file>
|
<file alias="open_dark">icons/open_dark.png</file>
|
||||||
<file alias="merge_light">icons/merge.png</file>
|
<file alias="merge_light">icons/merge_light.png</file>
|
||||||
<file alias="merge_dark">icons/merge_dark.png</file>
|
<file alias="merge_dark">icons/merge_dark.png</file>
|
||||||
<file alias="convert_light">icons/convert_light.png</file>
|
<file alias="convert_light">icons/convert_light.png</file>
|
||||||
<file alias="convert_dark">icons/convert_dark.png</file>
|
<file alias="convert_dark">icons/convert_dark.png</file>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from PySide6.QtWidgets import QWidget, QStackedLayout, QSizePolicy, QHBoxLayout, QPushButton, QLabel, QVBoxLayout, QGridLayout
|
from PySide6.QtWidgets import QWidget, QStackedLayout, QSizePolicy, QHBoxLayout, QFrame, QLabel, QVBoxLayout, QGridLayout, QSpacerItem
|
||||||
from PySide6.QtCore import Qt, QSize
|
from PySide6.QtCore import Qt, QSize, Signal
|
||||||
from PySide6.QtGui import QIcon, QFont, QImage, QPixmap
|
from PySide6.QtGui import QIcon, QFont, QImage, QPixmap
|
||||||
|
|
||||||
from fixtracks.widgets.tracks import FixTracks
|
from fixtracks.widgets.tracks import FixTracks
|
||||||
@ -9,22 +9,25 @@ from fixtracks.widgets.detectionmerge import MergeDetections
|
|||||||
from fixtracks.widgets.taskwidget import TasksWidget, Task
|
from fixtracks.widgets.taskwidget import TasksWidget, Task
|
||||||
from fixtracks.widgets.converter import Json2PandasConverter
|
from fixtracks.widgets.converter import Json2PandasConverter
|
||||||
|
|
||||||
class TaskCard(QWidget):
|
class TaskCard(QFrame):
|
||||||
|
clicked = Signal()
|
||||||
|
|
||||||
def __init__(self, name, icon, description, taks, parent=None):
|
def __init__(self, name, icon, description, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.setMaximumSize(300, 150)
|
self.setMaximumSize(300, 200)
|
||||||
# self.setStyleSheet("background-color: gray;")
|
self.setFrameShape(QFrame.Shape.Box)
|
||||||
|
# self.setStyleSheet("border: 2px solid gray; border-radius: 15px; border-color: white;background-color: green;")
|
||||||
font = QFont()
|
font = QFont()
|
||||||
font.setBold(True)
|
font.setBold(True)
|
||||||
font.setPointSize(14)
|
font.setPointSize(18)
|
||||||
|
|
||||||
name_label = QLabel(name)
|
name_label = QLabel(name)
|
||||||
name_label.setFont(font)
|
name_label.setFont(font)
|
||||||
description_label = QLabel(description)
|
description_label = QLabel(description)
|
||||||
description_label.setLineWidth(100)
|
description_label.setLineWidth(150)
|
||||||
|
description_label.setWordWrap(True)
|
||||||
icon_label = QLabel()
|
icon_label = QLabel()
|
||||||
icon_label.setFixedSize(128, 128)
|
icon_label.setFixedSize(150, 150)
|
||||||
pixmap = QPixmap.fromImage(QImage(icon))
|
pixmap = QPixmap.fromImage(QImage(icon))
|
||||||
scaled_pixmap = pixmap.scaled(icon_label.size(), Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
|
scaled_pixmap = pixmap.scaled(icon_label.size(), Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
|
||||||
icon_label.setPixmap(scaled_pixmap)
|
icon_label.setPixmap(scaled_pixmap)
|
||||||
@ -32,16 +35,15 @@ class TaskCard(QWidget):
|
|||||||
hbox = QHBoxLayout()
|
hbox = QHBoxLayout()
|
||||||
hbox.addWidget(icon_label)
|
hbox.addWidget(icon_label)
|
||||||
hbox.addWidget(description_label)
|
hbox.addWidget(description_label)
|
||||||
|
self.mousePressEvent = self._on_click
|
||||||
|
|
||||||
lyt = QVBoxLayout()
|
lyt = QVBoxLayout()
|
||||||
lyt.addWidget(name_label)
|
lyt.addWidget(name_label)
|
||||||
lyt.addLayout(hbox)
|
lyt.addLayout(hbox)
|
||||||
self.setLayout(lyt)
|
self.setLayout(lyt)
|
||||||
|
|
||||||
# trackBtn.clicked.connect(lambda: self._select_task(track))
|
def _on_click(self, event):
|
||||||
|
self.clicked.emit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CentralWidget(QWidget):
|
class CentralWidget(QWidget):
|
||||||
@ -49,7 +51,7 @@ class CentralWidget(QWidget):
|
|||||||
def __init__(self, darkmode, parent=None):
|
def __init__(self, darkmode, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||||
|
self._folderopen = False
|
||||||
self._tw = TasksWidget(darkmode)
|
self._tw = TasksWidget(darkmode)
|
||||||
self._tw.clicked.connect(self._select_task)
|
self._tw.clicked.connect(self._select_task)
|
||||||
self._tw.opened.connect(self.on_open)
|
self._tw.opened.connect(self.on_open)
|
||||||
@ -62,44 +64,40 @@ class CentralWidget(QWidget):
|
|||||||
|
|
||||||
self._trackwidget = FixTracks(self)
|
self._trackwidget = FixTracks(self)
|
||||||
self._trackwidget.back.connect(self._on_back)
|
self._trackwidget.back.connect(self._on_back)
|
||||||
|
version = "dark" if darkmode else "light"
|
||||||
|
convert_task = TaskCard(Task.CONVERT.value, f":/icons/convert_{version}",
|
||||||
|
"Convert JSON pose files to to Pandas data frames")
|
||||||
|
convert_task.clicked.connect(lambda: self._select_task(Task.CONVERT))
|
||||||
|
merge_task = TaskCard(Task.MERGE.value, f":/icons/merge_{version}", "Merge detections from two cameras to the same dataset")
|
||||||
|
merge_task.clicked.connect(lambda: self._select_task(Task.MERGE))
|
||||||
|
track_task = TaskCard(Task.MERGE.value, f":/icons/tracks_{version}", "Fix tracking of individuals, reassign track ids.")
|
||||||
|
track_task.clicked.connect(lambda: self._select_task(Task.TRACKS))
|
||||||
|
|
||||||
# convert = Task.CONVERT
|
|
||||||
# convertBtn = QPushButton(QIcon(":/icons/convert_light"), Task.CONVERT.value)
|
|
||||||
# convertBtn.setToolTip("Convert JSON pose files to to Pandas data frames")
|
|
||||||
# convertBtn.setIconSize(QSize(128, 128))
|
|
||||||
# convertBtn.clicked.connect(lambda: self._select_task(convert))
|
|
||||||
convert_task = TaskCard(Task.CONVERT.value, ":/icons/convert_light", "Convert JSON pose files to to Pandas data frames", Task.CONVERT)
|
|
||||||
|
|
||||||
merge = Task.MERGE
|
|
||||||
mergeBtn = QPushButton(QIcon(":/icons/merge_light"), Task.MERGE.value)
|
|
||||||
mergeBtn.setToolTip("Merge detections from two cameras to the same dataset")
|
|
||||||
mergeBtn.setIconSize(QSize(128, 128))
|
|
||||||
mergeBtn.clicked.connect(lambda: self._select_task(merge))
|
|
||||||
|
|
||||||
track = Task.TRACKS
|
|
||||||
trackBtn = QPushButton(QIcon(":/icons/tracks_light"), Task.TRACKS.value)
|
|
||||||
trackBtn.setToolTip("Fix tracking of individuals, reassign track ids.")
|
|
||||||
trackBtn.setIconSize(QSize(128, 128))
|
|
||||||
trackBtn.clicked.connect(lambda: self._select_task(track))
|
|
||||||
grid = QGridLayout()
|
grid = QGridLayout()
|
||||||
grid.addWidget(convert_task, 0, 0, alignment=Qt.AlignmentFlag.AlignCenter)
|
grid.addWidget(convert_task, 0, 0, alignment=Qt.AlignmentFlag.AlignCenter)
|
||||||
grid.addWidget(mergeBtn, 1, 0, alignment=Qt.AlignmentFlag.AlignCenter)
|
grid.addWidget(merge_task, 1, 0, alignment=Qt.AlignmentFlag.AlignCenter)
|
||||||
grid.addWidget(trackBtn, 2, 0, alignment=Qt.AlignmentFlag.AlignCenter)
|
grid.addWidget(track_task, 0, 1, alignment=Qt.AlignmentFlag.AlignCenter)
|
||||||
|
grid.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||||
|
l = QVBoxLayout()
|
||||||
|
l.setAlignment(Qt.AlignmentFlag.AlignHCenter)
|
||||||
|
l.addItem(QSpacerItem(100, 100, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding))
|
||||||
|
l.addLayout(grid)
|
||||||
|
l.addItem(QSpacerItem(100, 100, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding))
|
||||||
taskgrid = QWidget()
|
taskgrid = QWidget()
|
||||||
taskgrid.setMaximumWidth(1000)
|
taskgrid.setLayout(l)
|
||||||
taskgrid.setLayout(grid)
|
|
||||||
|
|
||||||
layout = QStackedLayout()
|
layout = QStackedLayout()
|
||||||
layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||||
self._tasksindex = layout.addWidget(self._tw)
|
self._btnindex = layout.addWidget(self._tw)
|
||||||
self._btnindex = layout.addWidget(taskgrid)
|
self._tasksindex = layout.addWidget(taskgrid)
|
||||||
self._convertindex = layout.addWidget(self._convertwidget)
|
self._convertindex = layout.addWidget(self._convertwidget)
|
||||||
self._mergeindex = layout.addWidget(self._mergewidget)
|
self._mergeindex = layout.addWidget(self._mergewidget)
|
||||||
self._trackindex = layout.addWidget(self._trackwidget)
|
self._trackindex = layout.addWidget(self._trackwidget)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
def on_open(self):
|
def on_open(self):
|
||||||
self.layout().setCurrentIndex(self._btnindex)
|
self.layout().setCurrentIndex(self._tasksindex)
|
||||||
|
self._folderopen = True
|
||||||
|
|
||||||
def _select_task(self, task):
|
def _select_task(self, task):
|
||||||
logging.debug("Centralwidget: Selected task: %s", task.value)
|
logging.debug("Centralwidget: Selected task: %s", task.value)
|
||||||
@ -112,7 +110,10 @@ class CentralWidget(QWidget):
|
|||||||
elif task == Task.CONVERT:
|
elif task == Task.CONVERT:
|
||||||
self.layout().setCurrentIndex(self._convertindex)
|
self.layout().setCurrentIndex(self._convertindex)
|
||||||
else:
|
else:
|
||||||
|
if self._folderopen:
|
||||||
self.layout().setCurrentIndex(self._tasksindex)
|
self.layout().setCurrentIndex(self._tasksindex)
|
||||||
|
else:
|
||||||
|
self.layout().setCurrentIndex(self._btnindex)
|
||||||
logging.warning("Centralwidget: got invalid task request: %s", task)
|
logging.warning("Centralwidget: got invalid task request: %s", task)
|
||||||
|
|
||||||
def _on_back(self):
|
def _on_back(self):
|
||||||
@ -137,7 +138,7 @@ def main():
|
|||||||
from PySide6.QtWidgets import QApplication
|
from PySide6.QtWidgets import QApplication
|
||||||
app = QApplication([])
|
app = QApplication([])
|
||||||
window = QWidget()
|
window = QWidget()
|
||||||
taskcard = TaskCard("test", "../icons/merge_light.png", "do something with manyt words, too many to fit in one line", Task.CONVERT)
|
taskcard = TaskCard("test", "../icons/merge_light.png", "do something with manyt words, too many to fit in one line")
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addWidget(taskcard)
|
layout.addWidget(taskcard)
|
||||||
|
|
||||||
|