From 8e965639e85e42deecf84842136d0fa255ec224b Mon Sep 17 00:00:00 2001 From: Adam Tyson Date: Tue, 16 Jan 2024 14:20:45 +0000 Subject: [PATCH] Move qtpy functionality from brainglobe-segmentation --- brainglobe_utils/qtpy/dialog.py | 29 +++++++++ brainglobe_utils/qtpy/interaction.py | 94 ++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 brainglobe_utils/qtpy/dialog.py create mode 100644 brainglobe_utils/qtpy/interaction.py diff --git a/brainglobe_utils/qtpy/dialog.py b/brainglobe_utils/qtpy/dialog.py new file mode 100644 index 0000000..69d24a0 --- /dev/null +++ b/brainglobe_utils/qtpy/dialog.py @@ -0,0 +1,29 @@ +from qtpy.QtWidgets import QMessageBox + + +def display_warning(widget, title, message): + """ + Display a warning in a pop-up that can be accepted or dismissed + """ + message_reply = QMessageBox.question( + widget, + title, + message, + QMessageBox.Yes | QMessageBox.Cancel, + ) + if message_reply == QMessageBox.Yes: + return True + else: + return False + + +def display_info(widget, title, message): + """ + Display information in a pop-up that can only be accepted + """ + QMessageBox.information( + widget, + title, + message, + QMessageBox.Ok, + ) diff --git a/brainglobe_utils/qtpy/interaction.py b/brainglobe_utils/qtpy/interaction.py new file mode 100644 index 0000000..81369bc --- /dev/null +++ b/brainglobe_utils/qtpy/interaction.py @@ -0,0 +1,94 @@ +from qtpy.QtWidgets import ( + QCheckBox, + QDoubleSpinBox, + QLabel, + QPushButton, + QSpinBox, +) + + +def add_button( + label, + layout, + connected_function, + *, + row: int = 0, + column: int = 0, + visibility=True, + minimum_width=0, + alignment="center", + tooltip=None, +): + button = QPushButton(label) + if alignment == "center": + pass + elif alignment == "left": + button.setStyleSheet("QPushButton { text-align: left; }") + elif alignment == "right": + button.setStyleSheet("QPushButton { text-align: right; }") + + button.setVisible(visibility) + button.setMinimumWidth(minimum_width) + + if tooltip: + button.setToolTip(tooltip) + layout.addWidget(button, row, column) + button.clicked.connect(connected_function) + return button + + +def add_checkbox( + layout, default, label, row: int = 0, column: int = 0, tooltip=None +): + box = QCheckBox() + box.setChecked(default) + if tooltip: + box.setToolTip(tooltip) + layout.addWidget(QLabel(label), row, column) + layout.addWidget(box, row, column + 1) + return box + + +def add_float_box( + layout, + default, + minimum, + maximum, + label, + step, + row: int = 0, + column: int = 0, + tooltip=None, +): + box = QDoubleSpinBox() + box.setMinimum(minimum) + box.setMaximum(maximum) + box.setValue(default) + box.setSingleStep(step) + if tooltip: + box.setToolTip(tooltip) + layout.addWidget(QLabel(label), row, column) + layout.addWidget(box, row, column + 1) + return box + + +def add_int_box( + layout, + default, + minimum, + maximum, + label, + row: int = 0, + column: int = 0, + tooltip=None, +): + box = QSpinBox() + box.setMinimum(minimum) + box.setMaximum(maximum) + # Not always set if not after min & max + box.setValue(default) + if tooltip: + box.setToolTip(tooltip) + layout.addWidget(QLabel(label), row, column) + layout.addWidget(box, row, column + 1) + return box