make actions more flexible
This commit is contained in:
parent
da06011b44
commit
71116f0599
@ -14,19 +14,19 @@ import fixtracks.resources
|
||||
class MainWindow(QMainWindow):
|
||||
def __init__(self, darkmode):
|
||||
super().__init__()
|
||||
self.create_actions()
|
||||
self._iconsuffix = "_dark" if darkmode else "_light"
|
||||
self._top_toolbar = None
|
||||
self._side_toolbar = None
|
||||
cw = CentralWidget()
|
||||
self.setCentralWidget(cw)
|
||||
self._iconsuffix = "_dark" if darkmode else "_light"
|
||||
self._cw = CentralWidget(darkmode)
|
||||
self.setCentralWidget(self._cw)
|
||||
self.create_actions()
|
||||
# cw.exit_signal.connect(self.exit_request)
|
||||
|
||||
def create_actions(self):
|
||||
self._file_open_action = QAction(QIcon(":/icons/open" + self._iconsuffix), "Open", self)
|
||||
self._file_open_action.setStatusTip("Open nix file")
|
||||
self._file_open_action.setShortcut(QKeySequence("Ctrl+o"))
|
||||
self._file_open_action.triggered.connect(self.on_file_open)
|
||||
# self._file_open_action = QAction(QIcon(":/icons/open" + self._iconsuffix), "Open", self)
|
||||
# self._file_open_action.setStatusTip("Open nix file")
|
||||
# self._file_open_action.setShortcut(QKeySequence("Ctrl+o"))
|
||||
# self._file_open_action.triggered.connect(self.on_file_open)
|
||||
|
||||
# self._file_close_action = QAction(QIcon(":/icons/file_close"), "Close", self)
|
||||
# self._file_close_action.setStatusTip("Close current nix file")
|
||||
@ -71,47 +71,60 @@ class MainWindow(QMainWindow):
|
||||
self.create_menu()
|
||||
|
||||
def create_menu(self):
|
||||
menu = self.menuBar()
|
||||
file_menu = menu.addMenu("&File")
|
||||
file_menu.addAction(self._file_open_action)
|
||||
menu_bar = self.menuBar()
|
||||
file_menu = menu_bar.addMenu("&File")
|
||||
# file_menu.addAction(self._file_close_action)
|
||||
file_menu.addSeparator()
|
||||
file_menu.addAction(self._quit_action)
|
||||
|
||||
plot_menu = menu.addMenu("&Plot")
|
||||
# plot_menu.addAction(self._plot_action)
|
||||
plot_menu.addAction(self._mergeview_action)
|
||||
tools_menu = menu_bar.addMenu("&Tools")
|
||||
tools_menu.addAction(self._mergeview_action)
|
||||
|
||||
help_menu = menu.addMenu("&Help")
|
||||
help_menu = menu_bar.addMenu("&Help")
|
||||
help_menu.addAction(self._about_action)
|
||||
help_menu.addAction(self._help_action)
|
||||
self.setMenuBar(menu)
|
||||
|
||||
menus = {"File": file_menu, "Tools": tools_menu}
|
||||
for k in self._cw.menuActions:
|
||||
actions = self._cw.menuActions[k]
|
||||
if k in menus:
|
||||
menu = menus[k]
|
||||
else:
|
||||
menu = menu_bar.addMenu(k)
|
||||
for a in actions:
|
||||
menu.addAction(a)
|
||||
self.setMenuBar(menu_bar)
|
||||
|
||||
def create_toolbar(self):
|
||||
self._toolbar = QToolBar("My main toolbar")
|
||||
self._top_toolbar = QToolBar("My main toolbar")
|
||||
self._top_toolbar.setAllowedAreas(Qt.ToolBarArea.TopToolBarArea)
|
||||
self._top_toolbar.setFloatable(False)
|
||||
self._top_toolbar.setIconSize(QSize(32, 32))
|
||||
|
||||
self._side_toolbar = QToolBar("Tools toolbar")
|
||||
self._side_toolbar.setAllowedAreas(Qt.ToolBarArea.LeftToolBarArea)
|
||||
self._top_toolbar.setIconSize(QSize(48, 48))
|
||||
|
||||
#self._toolbar.setStyleSheet("QToolButton:!hover {background-color:none}")
|
||||
self._toolbar.setAllowedAreas(Qt.ToolBarArea.LeftToolBarArea | Qt.ToolBarArea.TopToolBarArea)
|
||||
self._toolbar.setFloatable(False)
|
||||
self._toolbar.setIconSize(QSize(32, 32))
|
||||
|
||||
self._toolbar.addAction(self._file_open_action)
|
||||
# self._top_toolbar.addAction(self._file_open_action)
|
||||
# self._toolbar.addAction(self._file_close_action)
|
||||
self._toolbar.addSeparator()
|
||||
self._top_toolbar.addSeparator()
|
||||
self._top_toolbar.addAction(self._mergeview_action)
|
||||
# self._toolbar.addAction(self._plot_action)
|
||||
# self._toolbar.addAction(self._table_action)
|
||||
self._toolbar.addAction(self._help_action)
|
||||
|
||||
for a in self._cw.toolbarActions:
|
||||
self._side_toolbar.addAction(a)
|
||||
self._side_toolbar.addAction(self._help_action)
|
||||
empty = QWidget()
|
||||
empty.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
self._toolbar.addWidget(empty)
|
||||
self._toolbar.addSeparator()
|
||||
self._toolbar.addAction(self._quit_action)
|
||||
|
||||
# settings = QSettings(info.ORGANIZATION, info.NAME)
|
||||
# tb_orientation = settings.value("app/toolbar_area", "left")
|
||||
self.addToolBar(Qt.LeftToolBarArea if tb_orientation == "left" else Qt.TopToolBarArea, self._toolbar)
|
||||
# self._toolbar.topLevelChanged.connect(self.tb_changed)
|
||||
# del settings
|
||||
self._side_toolbar.addWidget(empty)
|
||||
self._side_toolbar.addSeparator()
|
||||
self._side_toolbar.addAction(self._quit_action)
|
||||
|
||||
self.addToolBar(Qt.LeftToolBarArea, self._side_toolbar)
|
||||
# self.addToolBar(Qt.TopToolBarArea, self._top_toolbar)
|
||||
|
||||
def on_file_open(self, s):
|
||||
QFileDialog.getExistingDirectory()
|
||||
|
@ -22,7 +22,7 @@
|
||||
<file alias="index">docs/index.md</file>
|
||||
<file alias="merge">docs/merge.md</file>
|
||||
<file alias="tracks">docs/tracks.md</file>
|
||||
<file alias="convert">docs/concert.md</file>
|
||||
<file alias="convert">docs/convert.md</file>
|
||||
<file alias="license">docs/license.md</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -9,11 +9,11 @@ from fixtracks.widgets.converter import Json2PandasConverter
|
||||
|
||||
class CentralWidget(QWidget):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
def __init__(self, darkmode, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
|
||||
self._tw = TasksWidget()
|
||||
self._tw = TasksWidget(darkmode)
|
||||
self._tw.clicked.connect(self._select_task)
|
||||
|
||||
self._mergewidget = MergeDetections(self)
|
||||
@ -49,6 +49,14 @@ class CentralWidget(QWidget):
|
||||
def _on_back(self):
|
||||
self.layout().setCurrentIndex(self._tasksindex)
|
||||
|
||||
@property
|
||||
def toolbarActions(self):
|
||||
return self._tw.toolbarActions
|
||||
|
||||
@property
|
||||
def menuActions(self):
|
||||
return self._tw.menuActions
|
||||
|
||||
# # @Slot(None)
|
||||
# def on_exit(self):
|
||||
# self.exit_signal.emit()
|
||||
|
@ -9,53 +9,87 @@ from PySide6.QtGui import QIcon, QAction, QPixmap
|
||||
class TasksWidget(QWidget):
|
||||
clicked = Signal((str,))
|
||||
|
||||
def __init__(self, parent = None):
|
||||
def __init__(self, darkmode, parent = None):
|
||||
super().__init__(parent)
|
||||
self._iconsuffix = "_dark" if darkmode else "_light"
|
||||
self._toolbarActions = {}
|
||||
self._menuActions = {}
|
||||
self._file_list = []
|
||||
|
||||
self.createActions()
|
||||
self.createLayout()
|
||||
|
||||
def createActions(self):
|
||||
self._openAction = QAction(QIcon(":icons/open" + self._iconsuffix), "Open folder")
|
||||
self._openAction.triggered.connect(self._on_open)
|
||||
self._openAction.setEnabled(True)
|
||||
|
||||
self._convertAction = QAction(QIcon(":/icons/convert" + self._iconsuffix), "Convert")
|
||||
self._convertAction.setToolTip("Convert JSON pose files to to Pandas data frames")
|
||||
self._openAction.triggered.connect(self._convert_clicked)
|
||||
|
||||
self._mergeAction = QAction(QIcon(":/icons/merge" + self._iconsuffix), "Merge")
|
||||
self._mergeAction.setToolTip("Merge detections from two cameras to the same dataset")
|
||||
self._mergeAction.triggered.connect(self._merge_clicked)
|
||||
|
||||
self._tracksAction = QAction(QIcon(":/icons/tracks" + self._iconsuffix), "Tracks")
|
||||
self._tracksAction.setToolTip("Merge detections from two cameras to the same dataset")
|
||||
self._tracksAction.triggered.connect(self._tracks_clicked)
|
||||
|
||||
self._menuActions["File"] = [self._openAction]
|
||||
self._menuActions["Tools"] = [self._convertAction, self._mergeAction, self._tracksAction]
|
||||
self._toolbarActions = [self._convertAction, self._mergeAction, self._tracksAction]
|
||||
|
||||
def createLayout(self):
|
||||
def buttonfromaction(action: QAction):
|
||||
btn = QPushButton(action.icon(), "")
|
||||
btn.setStatusTip(action.toolTip())
|
||||
btn.setToolTip(action.text())
|
||||
btn.clicked.connect(action.trigger)
|
||||
return btn
|
||||
|
||||
openBtn = buttonfromaction(self._openAction)
|
||||
openBtn.setEnabled(True)
|
||||
openBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
openBtn.setMaximumSize(300, 300)
|
||||
openBtn.setIconSize(0.95 * openBtn.size())
|
||||
|
||||
folderBtn = QPushButton()
|
||||
folderBtn.setEnabled(True)
|
||||
folderBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
folderBtn.setMaximumSize(300, 300)
|
||||
folderBtn.setIcon(QIcon(":icons/open"))
|
||||
folderBtn.setIconSize(0.95 * folderBtn.size())
|
||||
folderBtn.clicked.connect(self._open_folder)
|
||||
|
||||
self.convertBtn = QPushButton()
|
||||
self.convertBtn.setIcon(QIcon(":/icons/convert"))
|
||||
self.convertBtn.setToolTip("Convert JSON pose files to to Pandas data frames")
|
||||
self.convertBtn.setEnabled(True)
|
||||
self.convertBtn.setFixedSize(250, 100)
|
||||
self.convertBtn.setIconSize(0.95 * self.convertBtn.size())
|
||||
self.convertBtn.clicked.connect(self._convert_clicked)
|
||||
# self.convertBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
|
||||
self.mergeBtn = QPushButton(QIcon(":/icons/merge"), "")
|
||||
self.mergeBtn.setEnabled(False)
|
||||
self.mergeBtn.setFixedSize(250, 100)
|
||||
self.mergeBtn.setIconSize(0.95 * self.mergeBtn.size())
|
||||
self.mergeBtn.clicked.connect(self._merge_clicked)
|
||||
# self.mergeBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
|
||||
self.tracksBtn = QPushButton(QIcon(":/icons/tracks"), "")
|
||||
self.tracksBtn.setEnabled(False)
|
||||
self.tracksBtn.setFixedSize(250, 100)
|
||||
self.tracksBtn.setIconSize(0.95 * self.tracksBtn.size())
|
||||
self.tracksBtn.clicked.connect(self._tracks_clicked)
|
||||
# self.tracksBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
convertBtn = buttonfromaction(self._convertAction)
|
||||
convertBtn.setEnabled(True)
|
||||
convertBtn.setFixedSize(250, 100)
|
||||
convertBtn.setIconSize(0.95 * convertBtn.size())
|
||||
|
||||
mergeBtn = buttonfromaction(self._mergeAction)
|
||||
mergeBtn.setEnabled(False)
|
||||
mergeBtn.setFixedSize(250, 100)
|
||||
mergeBtn.setIconSize(0.95 * mergeBtn.size())
|
||||
|
||||
tracksBtn = buttonfromaction(self._tracksAction)
|
||||
tracksBtn.setEnabled(False)
|
||||
tracksBtn.setFixedSize(250, 100)
|
||||
tracksBtn.setIconSize(0.95 * tracksBtn.size())
|
||||
|
||||
l = QGridLayout()
|
||||
l.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(folderBtn, 0, 0, 3, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(self.convertBtn, 0, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(self.mergeBtn, 1, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(self.tracksBtn, 2, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(openBtn, 0, 0, 3, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(convertBtn, 0, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(mergeBtn, 1, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
l.addWidget(tracksBtn, 2, 1, 1, 1, Qt.AlignmentFlag.AlignCenter)
|
||||
|
||||
# l.addWidget(folderBtn)
|
||||
# l.addWidget(self.convertBtn)
|
||||
# l.addWidget(self.mergeBtn)
|
||||
# l.addWidget(self.tracksBtn)
|
||||
self.setLayout(l)
|
||||
self._file_list = []
|
||||
|
||||
|
||||
@property
|
||||
def toolbarActions(self):
|
||||
return self._toolbarActions
|
||||
|
||||
@property
|
||||
def menuActions(self):
|
||||
return self._menuActions
|
||||
|
||||
def _merge_clicked(self):
|
||||
self.clicked.emit("Merge")
|
||||
@ -66,7 +100,7 @@ class TasksWidget(QWidget):
|
||||
def _convert_clicked(self):
|
||||
self.clicked.emit("Convert")
|
||||
|
||||
def _open_folder(self):
|
||||
def _on_open(self):
|
||||
logging.debug("TasksWidget:select data folder")
|
||||
folder = QFileDialog.getExistingDirectory()
|
||||
if len(folder.strip()) == 0:
|
||||
|
2
main.py
2
main.py
@ -47,7 +47,7 @@ app.setOrganizationDomain(info.organization_name)
|
||||
# icn = QIcon(":/icons/app_icon")
|
||||
# app.setWindowIcon(icn)
|
||||
# Create a Qt widget, which will be our window.
|
||||
window = fixtracks.MainWindow(is_dark_mode())
|
||||
window = fixtracks.MainWindow(is_dark_mode(app))
|
||||
window.setGeometry(100, 100, 1024, 768)
|
||||
window.setWindowTitle("FixTracks")
|
||||
window.setMinimumWidth(1024)
|
||||
|
Loading…
Reference in New Issue
Block a user