mirror of
https://github.com/283375/arcaea-offline-ocr-model.git
synced 2025-11-14 08:22:14 +00:00
wip(ui): sample classifying
This commit is contained in:
92
ui/components/projectEntry_Classify.py
Normal file
92
ui/components/projectEntry_Classify.py
Normal file
@ -0,0 +1,92 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import Qt, Slot
|
||||
from PySide6.QtGui import QDragEnterEvent, QDropEvent
|
||||
from PySide6.QtWidgets import QLabel, QWidget
|
||||
|
||||
from project import Project
|
||||
|
||||
from .projectEntry_Classify_ui import Ui_ProjectEntry_Classify
|
||||
|
||||
|
||||
class TagLabel(QLabel):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setAcceptDrops(True)
|
||||
|
||||
self.project: Project | None = None
|
||||
self.tag = None
|
||||
|
||||
def enableDropEffect(self):
|
||||
# palette = self.palette()
|
||||
# palette.setBrush(QPalette.ColorRole.Base, palette.highlight())
|
||||
# palette.setBrush(QPalette.ColorRole.Window, palette.highlight())
|
||||
# palette.setBrush(QPalette.ColorRole.Text, palette.highlightedText())
|
||||
# self.setPalette(palette)
|
||||
font = self.font()
|
||||
font.setBold(True)
|
||||
font.setUnderline(True)
|
||||
self.setFont(font)
|
||||
|
||||
def disableDropEffect(self):
|
||||
# palette = self.palette()
|
||||
# palette.setBrush(QPalette.ColorRole.Base, palette.base())
|
||||
# palette.setBrush(QPalette.ColorRole.Window, palette.window())
|
||||
# palette.setBrush(QPalette.ColorRole.Text, palette.text())
|
||||
# self.setPalette(palette)
|
||||
font = self.font()
|
||||
font.setBold(False)
|
||||
font.setUnderline(False)
|
||||
self.setFont(font)
|
||||
|
||||
def dragEnterEvent(self, event: QDragEnterEvent):
|
||||
mimeData = event.mimeData()
|
||||
if mimeData.hasFormat("application/ao-ocr-model_sample"):
|
||||
self.enableDropEffect()
|
||||
event.accept()
|
||||
|
||||
def dragLeaveEvent(self, event):
|
||||
self.disableDropEffect()
|
||||
return super().dragLeaveEvent(event)
|
||||
|
||||
def dropEvent(self, event: QDropEvent):
|
||||
if self.project and self.tag and event.dropAction() == Qt.DropAction.MoveAction:
|
||||
data = bytes(event.mimeData().data("application/ao-ocr-model_sample"))
|
||||
paths = json.loads(data.decode("utf-8"))
|
||||
paths = [Path(p) for p in paths]
|
||||
for path in paths:
|
||||
self.project.classify(path, self.tag)
|
||||
event.acceptProposedAction()
|
||||
|
||||
if not event.isAccepted():
|
||||
event.ignore()
|
||||
self.disableDropEffect()
|
||||
|
||||
|
||||
class ProjectEntry_Classify(Ui_ProjectEntry_Classify, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
self.project = None
|
||||
|
||||
self.tagLabels: list[TagLabel] = []
|
||||
|
||||
def setProject(self, project: Project):
|
||||
self.project = project
|
||||
|
||||
for tagLabel in self.tagLabels:
|
||||
self.frame.layout().removeWidget(tagLabel)
|
||||
tagLabel.deleteLater()
|
||||
|
||||
for tag in self.project.tags:
|
||||
tagLabel = TagLabel(self)
|
||||
tagLabel.tag = tag
|
||||
tagLabel.project = project
|
||||
tagLabel.setText(tag)
|
||||
self.frame.layout().addWidget(tagLabel)
|
||||
self.tagLabels.append(tagLabel)
|
||||
|
||||
@Slot()
|
||||
def on_loadSamplesButton_clicked(self):
|
||||
self.samplesListWidget.setSamples(self.project.samplesUnclassified)
|
||||
Reference in New Issue
Block a user