mirror of
https://github.com/283375/arcaea-offline-ocr-model.git
synced 2025-07-01 20:36:26 +00:00
wip(ui): sample classifying
This commit is contained in:
61
ui/extends/samplesListWidget.py
Normal file
61
ui/extends/samplesListWidget.py
Normal file
@ -0,0 +1,61 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import QByteArray, QMimeData, Qt
|
||||
from PySide6.QtGui import QDrag, QPixmap
|
||||
from PySide6.QtWidgets import QListWidget, QListWidgetItem, QMessageBox, QProgressDialog
|
||||
|
||||
|
||||
class SamplesListWidget(QListWidget):
|
||||
PathlibPathRole = Qt.ItemDataRole.UserRole
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setViewMode(QListWidget.ViewMode.IconMode)
|
||||
self.setEditTriggers(QListWidget.EditTrigger.NoEditTriggers)
|
||||
self.setMovement(QListWidget.Movement.Static)
|
||||
self.setDragDropMode(QListWidget.DragDropMode.DragOnly)
|
||||
self.setDragEnabled(True)
|
||||
self.setSelectionMode(QListWidget.SelectionMode.MultiSelection)
|
||||
|
||||
def setSamples(self, samples: list[Path]):
|
||||
self.clear()
|
||||
|
||||
samplesNum = len(samples)
|
||||
progressDialog = QProgressDialog("", "Abort", 0, samplesNum, self)
|
||||
progressDialog.setWindowModality(Qt.WindowModality.ApplicationModal)
|
||||
|
||||
for i, sample in enumerate(samples):
|
||||
item = QListWidgetItem(QPixmap(str(sample)), f"{sample.stem[:3]}...", self)
|
||||
item.setData(self.PathlibPathRole, sample)
|
||||
self.addItem(item)
|
||||
progressDialog.setValue(i)
|
||||
progressDialog.setLabelText(f"{i + 1}/{samplesNum}")
|
||||
|
||||
if progressDialog.wasCanceled():
|
||||
break
|
||||
|
||||
progressDialog.setValue(samplesNum)
|
||||
QMessageBox.information(
|
||||
self, None, f"Loaded {self.model().rowCount()} samples."
|
||||
)
|
||||
|
||||
def startDrag(self, supportedActions: Qt.DropAction):
|
||||
drag = QDrag(self)
|
||||
items = self.selectedItems()
|
||||
paths = [str(item.data(self.PathlibPathRole).resolve()) for item in items]
|
||||
mimeDataString = json.dumps(paths, ensure_ascii=False)
|
||||
|
||||
mimeData = QMimeData()
|
||||
mimeData.setData(
|
||||
"application/ao-ocr-model_sample",
|
||||
QByteArray(mimeDataString.encode("utf-8")),
|
||||
)
|
||||
|
||||
drag.setPixmap(items[0].icon().pixmap(items[0].icon().availableSizes()[0]))
|
||||
drag.setMimeData(mimeData)
|
||||
if drag.exec(Qt.DropAction.MoveAction) == Qt.DropAction.MoveAction:
|
||||
for item in items:
|
||||
index = self.indexFromItem(item)
|
||||
self.model().removeRow(index.row())
|
Reference in New Issue
Block a user