From 0ae960a405375bd7a05b4ca1f74f495f6594fe60 Mon Sep 17 00:00:00 2001 From: 283375 Date: Sun, 24 Sep 2023 02:07:21 +0800 Subject: [PATCH] feat: `BlockLabelDialog` --- ui/components/blockLabelDialog.py | 38 ++++++++++++++++++++++ ui/components/projectEntry_Classify.py | 7 +++- ui/components/projectEntry_Manage.py | 44 +++++++++++--------------- 3 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 ui/components/blockLabelDialog.py diff --git a/ui/components/blockLabelDialog.py b/ui/components/blockLabelDialog.py new file mode 100644 index 0000000..916b96e --- /dev/null +++ b/ui/components/blockLabelDialog.py @@ -0,0 +1,38 @@ +from PySide6.QtCore import Qt +from PySide6.QtWidgets import QApplication, QLabel + + +class BlockLabelDialog(QLabel): + def __init__( + self, + parent=None, + modality: Qt.WindowModality = Qt.WindowModality.ApplicationModal, + *, + autoShow: bool = False + ): + super().__init__(parent) + + self.setWindowFlag(Qt.WindowType.Dialog, True) + self.setWindowFlag(Qt.WindowType.WindowMinimizeButtonHint, False) + self.setWindowFlag(Qt.WindowType.WindowMaximizeButtonHint, False) + self.setWindowFlag(Qt.WindowType.WindowCloseButtonHint, False) + self.setWindowModality(modality) + self.setWindowTitle("Please Wait") + self.setMinimumWidth(200) + self.setMargin(20) + self.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.autoShow = autoShow + + def show(self): + super().show() + QApplication.processEvents() + + def __enter__(self): + if self.autoShow: + self.show() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + self.deleteLater() diff --git a/ui/components/projectEntry_Classify.py b/ui/components/projectEntry_Classify.py index 341a1a5..6647c60 100644 --- a/ui/components/projectEntry_Classify.py +++ b/ui/components/projectEntry_Classify.py @@ -7,6 +7,7 @@ from PySide6.QtWidgets import QLabel, QWidget from project import Project +from .blockLabelDialog import BlockLabelDialog from .projectEntry_Classify_ui import Ui_ProjectEntry_Classify @@ -89,4 +90,8 @@ class ProjectEntry_Classify(Ui_ProjectEntry_Classify, QWidget): @Slot() def on_loadSamplesButton_clicked(self): - self.samplesListWidget.setSamples(self.project.samplesUnclassified) + with BlockLabelDialog(self) as block: + block.setText(f"{self.project.name}
Loading unclassified samples") + block.show() + + self.samplesListWidget.setSamples(self.project.samplesUnclassified) diff --git a/ui/components/projectEntry_Manage.py b/ui/components/projectEntry_Manage.py index 09c02af..8d14aa8 100644 --- a/ui/components/projectEntry_Manage.py +++ b/ui/components/projectEntry_Manage.py @@ -1,8 +1,9 @@ from PySide6.QtCore import Qt, Signal, Slot -from PySide6.QtWidgets import QApplication, QLabel, QWidget +from PySide6.QtWidgets import QApplication, QWidget from project import Project +from .blockLabelDialog import BlockLabelDialog from .projectEntry_Manage_ui import Ui_ProjectEntry_Manage from .yieldProgress import YieldProgress @@ -26,31 +27,24 @@ class ProjectEntry_Manage(Ui_ProjectEntry_Manage, QWidget): self.projectDescriptionLabel.setText("-") return - blockLabel = QLabel(self) - blockLabel.setWindowModality(Qt.WindowModality.ApplicationModal) - blockLabel.setWindowFlag(Qt.WindowType.Dialog, True) - blockLabel.setWindowFlag(Qt.WindowType.WindowMinimizeButtonHint, False) - blockLabel.setWindowFlag(Qt.WindowType.WindowMaximizeButtonHint, False) - blockLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - blockLabel.setText(f"Loading project
{self.project.name}") - blockLabel.setMargin(20) - blockLabel.show() - QApplication.processEvents() - self.projectNameLabel.setText(self.project.name) - self.projectDescriptionLabel.setText( - "
".join( - [ - str(self.project.path.resolve()), - f"{len(self.project.sources)} sources", - f"{len(self.project.samples)} samples", - f"- {len(self.project.samplesClassified)} classified", - f"- {len(self.project.samplesIgnored)} ignored", - f"- {len(self.project.samplesUnclassified)} unclassified", - ] + with BlockLabelDialog(self) as block: + block.setText(f"{self.project.name}
Updating status") + block.show() + + QApplication.processEvents() + self.projectNameLabel.setText(self.project.name) + self.projectDescriptionLabel.setText( + "
".join( + [ + str(self.project.path.resolve()), + f"{len(self.project.sources)} sources", + f"{len(self.project.samples)} samples", + f"- {len(self.project.samplesClassified)} classified", + f"- {len(self.project.samplesIgnored)} ignored", + f"- {len(self.project.samplesUnclassified)} unclassified", + ] + ) ) - ) - blockLabel.close() - blockLabel.deleteLater() @Slot() def on_updateButton_clicked(self):