增加了删除图片的功能。

This commit is contained in:
2025-11-27 16:42:13 +08:00
parent 970bf1c3ff
commit 88be46e79e
5 changed files with 216 additions and 1 deletions
+103
View File
@@ -151,12 +151,16 @@ class PreviewPanel(ctk.CTkFrame):
parent,
sqlite_manager,
on_download_callback: Callable,
mysql_manager=None,
on_delete_callback: Callable = None,
**kwargs
):
super().__init__(parent, **kwargs)
self.sqlite_manager = sqlite_manager
self.mysql_manager = mysql_manager
self.on_download_callback = on_download_callback
self.on_delete_callback = on_delete_callback
# 数据
self.current_data = []
@@ -235,6 +239,17 @@ class PreviewPanel(ctk.CTkFrame):
)
self.download_btn.pack(side="left", padx=5)
self.delete_btn = ctk.CTkButton(
left_buttons,
text="🗑️ 删除选中",
command=self._on_delete,
width=100,
height=30,
fg_color="red",
hover_color="darkred"
)
self.delete_btn.pack(side="left", padx=5)
# 分页控件
page_frame = ctk.CTkFrame(bottom_frame)
page_frame.pack(side="right", padx=10, pady=10)
@@ -383,6 +398,94 @@ class PreviewPanel(ctk.CTkFrame):
if self.on_download_callback:
self.on_download_callback(selected_data)
def _on_delete(self):
"""删除选中的图片"""
if not self.selected_ids:
messagebox.showwarning("提示", "请先选择要删除的图片")
return
# 获取选中的图片数据
selected_data = [
data for data in self.current_data
if data['id'] in self.selected_ids
]
# 二次确认(简化版,不显示删除范围选项)
count = len(selected_data)
confirm = messagebox.askyesno(
"确认删除",
f"确定要删除选中的 {count} 张图片吗?\n\n"
"此操作将:\n"
"1. 从MySQL数据库中删除记录\n"
"2. 删除已下载的本地文件(如有)\n\n"
"删除后无法恢复!",
icon='warning'
)
if not confirm:
return
# 在后台线程执行删除
def delete_thread():
try:
from config import DELETE_MODE
success_count = 0
failed_ids = []
for data in selected_data:
try:
# 模式B: 仅删除MySQL
if DELETE_MODE == 'remote':
# 删除MySQL记录
if self.mysql_manager:
deleted = self.mysql_manager.delete_records(
data['datasource'],
[data['id']]
)
if deleted > 0:
# 删除SQLite记录和本地文件
self.sqlite_manager.delete_download_record(
data['datasource'],
data['image_url'],
delete_file=True
)
success_count += 1
else:
failed_ids.append(data['id'])
else:
failed_ids.append(data['id'])
except Exception as e:
print(f"删除记录失败 (ID: {data['id']}): {e}")
failed_ids.append(data['id'])
# 更新UI(在主线程)
self.after(0, lambda: self._on_delete_complete(success_count, len(failed_ids)))
except Exception as e:
print(f"删除操作失败: {e}")
self.after(0, lambda: messagebox.showerror("错误", f"删除失败: {e}"))
threading.Thread(target=delete_thread, daemon=True).start()
def _on_delete_complete(self, success_count: int, failed_count: int):
"""删除完成回调"""
# 显示结果
if failed_count == 0:
messagebox.showinfo("删除成功", f"成功删除 {success_count} 张图片")
else:
messagebox.showwarning(
"部分删除失败",
f"成功删除 {success_count} 张图片\n失败 {failed_count}"
)
# 清空选中
self.selected_ids.clear()
# 调用删除回调,刷新数据
if self.on_delete_callback:
self.on_delete_callback()
def _on_preview(self, data: Dict):
"""查看大图"""
# 创建预览窗口