项目初始化 - 创建完整项目结构(src/, data/, docs/, examples/, tests/) - 配置requirements.txt依赖 - 创建.gitignore P0基础框架 - 数据库模型:Record模型,6种分类类型 - 配置管理:YAML配置,支持AI/OCR/云存储/UI配置 - OCR模块:PaddleOCR本地识别,支持云端扩展 - AI模块:支持OpenAI/Claude/通义/Ollama,6种分类 - 存储模块:完整CRUD,搜索,统计,导入导出 - 主窗口框架:侧边栏导航,米白配色方案 - 图片处理:截图/剪贴板/文件选择/图片预览 - 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制 - 分类浏览:卡片网格展示,分类筛选,搜索,详情查看 技术栈 - PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK - 共47个Python文件,4000+行代码 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
图片处理组件快速参考
导入所有组件
from src.gui.widgets import (
ScreenshotWidget,
ClipboardMonitor,
ImagePicker,
ImagePreviewWidget,
take_screenshot,
)
1. 截图组件 (ScreenshotWidget)
# 创建截图组件
screenshot_widget = ScreenshotWidget(parent)
# 连接信号
screenshot_widget.screenshot_saved.connect(lambda path: print(f"保存到: {path}"))
# 触发截图
screenshot_widget.take_screenshot()
# 或使用全局快捷键函数
take_screenshot()
2. 剪贴板监听 (ClipboardMonitor)
# 创建监听器
monitor = ClipboardMonitor(parent)
# 连接图片检测信号
monitor.image_detected.connect(lambda path: handle_image(path))
# 控制监听状态
monitor.set_enabled(True) # 启用
monitor.set_enabled(False) # 禁用
# 检查当前剪贴板
if monitor.has_image():
pixmap = monitor.get_image()
# 保存到文件
monitor.save_current_image("/path/to/save.png")
# 清空历史
monitor.clear_history()
3. 图片选择器 (ImagePicker)
# 单选模式
picker = ImagePicker(multiple=False, parent)
picker.image_selected.connect(lambda path: print(path))
# 多选模式
picker = ImagePicker(multiple=True, parent)
picker.images_selected.connect(lambda paths: print(paths))
# 获取已选择的图片
paths = picker.get_selected_images()
# 清除选择
picker.clear_selection()
4. 图片预览 (ImagePreviewWidget)
# 创建预览组件
preview = ImagePreviewWidget(parent)
# 加载图片
preview.load_image("/path/to/image.png")
# 或加载 QPixmap
from PyQt6.QtGui import QPixmap
preview.load_pixmap(QPixmap("/path/to/image.png"))
# 缩放操作
preview.zoom_in() # 放大
preview.zoom_out() # 缩小
preview.fit_to_window() # 适应窗口
preview.actual_size() # 实际大小
# 旋转操作
preview.rotate(90) # 向右旋转 90 度
preview.rotate(-90) # 向左旋转 90 度
# 全屏切换
preview.toggle_fullscreen()
# 清除图片
preview.clear()
# 获取当前图片
pixmap = preview.get_current_pixmap()
主窗口集成示例
from src.gui.main_window import MainWindow
from PyQt6.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+Shift+A |
新建截图 |
Ctrl+Shift+V |
粘贴剪贴板图片 |
Ctrl+Shift+O |
导入图片 |
Ctrl++ |
放大图片 |
Ctrl+- |
缩小图片 |
Ctrl+F |
适应窗口 |
Ctrl+0 |
实际大小 |
Ctrl+L |
向左旋转 |
Ctrl+R |
向右旋转 |
F11 |
全屏切换 |
ESC |
取消截图/退出全屏 |
信号连接示例
# 截图保存完成
screenshot_widget.screenshot_saved.connect(on_screenshot_saved)
# 剪贴板图片检测
clipboard_monitor.image_detected.connect(on_clipboard_image)
# 图片选择
image_picker.image_selected.connect(on_image_selected)
image_picker.images_selected.connect(on_images_selected)
# 图片预览事件
image_preview.image_loaded.connect(on_image_loaded)
image_preview.image_load_failed.connect(on_load_failed)
临时文件路径
import tempfile
from pathlib import Path
# 截图临时目录
screenshot_dir = Path(tempfile.gettempdir()) / "cutthenthink" / "screenshots"
# 剪贴板临时目录
clipboard_dir = Path(tempfile.gettempdir()) / "cutthenthink" / "clipboard"