Skip to content

Commit b2f607b

Browse files
committed
fix(lazy-images): support removing items in ListImagesWidget
1 parent 005bcd9 commit b2f607b

2 files changed

Lines changed: 39 additions & 2 deletions

File tree

‎sqlite3__examples/view_many_images__lazy__delegates__async_load_images/utils_PyQt6/FileListModel.py‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,23 @@ def fetchMore(self, parent: QModelIndex | None = None) -> None:
9797
items_to_fetch, self.current_file_count, self.total_file_count
9898
)
9999

100+
def removeRows(self, row: int, count: int, parent :QModelIndex | None=None) -> bool:
101+
self.beginRemoveRows(parent, row, row + count - 1)
102+
103+
del self.total_file_list[row: row + count]
104+
self.current_file_count -= count
105+
106+
self.endRemoveRows()
107+
108+
# TODO: Зачем вообще нужен items_to_fetch?
109+
remainder: int = self.total_file_count - self.current_file_count
110+
items_to_fetch: int = min(self.batch_size, remainder)
111+
self.numberPopulated.emit(
112+
items_to_fetch, self.current_file_count, self.total_file_count
113+
)
114+
115+
return True
116+
100117
def set_total_file_list(self, file_list: list[str]) -> None:
101118
self.beginResetModel()
102119

‎sqlite3__examples/view_many_images__lazy__delegates__async_load_images/utils_PyQt6/ListImagesWidget.py‎

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from PyQt6.QtGui import QImage
88
from PyQt6.QtWidgets import QListView
9-
from PyQt6.QtCore import Qt
9+
from PyQt6.QtCore import Qt, QModelIndex
1010

1111
from .ThumbnailDelegate import ThumbnailDelegate
1212

@@ -21,6 +21,8 @@ def __init__(
2121
) -> None:
2222
super().__init__()
2323

24+
self.image_cache: dict[str, QImage | None] = image_cache
25+
2426
self.setMovement(QListView.Movement.Static)
2527
self.setDragEnabled(False)
2628
self.setDragDropMode(QListView.DragDropMode.NoDragDrop)
@@ -31,7 +33,7 @@ def __init__(
3133
self.setUniformItemSizes(True)
3234
self.setItemDelegate(
3335
ThumbnailDelegate(
34-
self, icon_width, icon_height, image_cache, file_name_index
36+
self, icon_width, icon_height, self.image_cache, file_name_index
3537
)
3638
)
3739

@@ -41,3 +43,21 @@ def currentFileName(self) -> str | None:
4143
return None
4244

4345
return index.data(Qt.ItemDataRole.DisplayRole)
46+
47+
def removeFromList(self, file_name: str) -> None:
48+
model = self.model()
49+
50+
found_indexes: list[QModelIndex] = model.match(
51+
model.index(0, 0),
52+
Qt.ItemDataRole.DisplayRole,
53+
file_name,
54+
1, # hits
55+
Qt.MatchFlag.MatchExactly,
56+
)
57+
if found_indexes:
58+
target_index: QModelIndex = found_indexes[0]
59+
model.removeRow(target_index.row())
60+
61+
file_name = target_index.data(Qt.ItemDataRole.DisplayRole)
62+
if file_name in self.image_cache:
63+
self.image_cache.pop(file_name)

0 commit comments

Comments
 (0)