第一次提交。
其中爬取是tophub_scraper.py 数据入库是 tophub_add_data_to_db.py 查看当前数据内容是 db_viewer.py
This commit is contained in:
155
右键菜单功能说明.md
Normal file
155
右键菜单功能说明.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# 右键菜单功能说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
TopHub数据查看器的右键菜单功能允许用户通过右键点击表格中的项目,快速执行常用操作,提高操作效率。
|
||||
|
||||
## 新增功能
|
||||
|
||||
### 1. 标记为感兴趣
|
||||
- **功能描述**:将选中的项目标记为感兴趣状态
|
||||
- **数据库操作**:将对应记录的`is_interested`字段设置为1
|
||||
- **界面显示**:在"感兴趣"列显示为"是",使用绿色粗体字体
|
||||
|
||||
### 2. 标记为不感兴趣
|
||||
- **功能描述**:将选中的项目标记为不感兴趣状态
|
||||
- **数据库操作**:将对应记录的`is_interested`字段设置为0
|
||||
- **界面显示**:在"感兴趣"列显示为"否",使用普通字体和颜色
|
||||
|
||||
### 3. 删除选中项
|
||||
- **功能描述**:删除选中的项目
|
||||
- **数据库操作**:从数据库中删除对应记录
|
||||
- **界面显示**:从表格中移除对应行
|
||||
|
||||
## 使用方法
|
||||
|
||||
1. 打开TopHub数据查看器
|
||||
2. 在表格中右键点击任意项目
|
||||
3. 在弹出的右键菜单中选择所需操作:
|
||||
- 点击"标记为感兴趣"将项目标记为感兴趣
|
||||
- 点击"标记为不感兴趣"将项目标记为不感兴趣
|
||||
- 点击"删除选中项"删除选中的项目
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 右键菜单实现
|
||||
```python
|
||||
# 启用右键菜单
|
||||
self.table.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||
self.table.customContextMenuRequested.connect(self.show_context_menu)
|
||||
|
||||
def show_context_menu(self, position):
|
||||
"""显示右键菜单"""
|
||||
# 获取点击位置的行
|
||||
row = self.table.rowAt(position.y())
|
||||
if row < 0:
|
||||
return
|
||||
|
||||
# 选中该行
|
||||
self.table.selectRow(row)
|
||||
|
||||
# 创建右键菜单
|
||||
menu = QMenu(self)
|
||||
|
||||
# 添加"标记为感兴趣"动作
|
||||
mark_action = QAction("标记为感兴趣", self)
|
||||
mark_action.triggered.connect(self.mark_as_interested)
|
||||
menu.addAction(mark_action)
|
||||
|
||||
# 添加"标记为不感兴趣"动作
|
||||
unmark_action = QAction("标记为不感兴趣", self)
|
||||
unmark_action.triggered.connect(self.mark_as_not_interested)
|
||||
menu.addAction(unmark_action)
|
||||
|
||||
# 添加分隔线
|
||||
menu.addSeparator()
|
||||
|
||||
# 添加"删除"动作
|
||||
delete_action = QAction("删除选中项", self)
|
||||
delete_action.triggered.connect(self.delete_selected_items)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
# 显示菜单
|
||||
menu.exec_(self.table.mapToGlobal(position))
|
||||
```
|
||||
|
||||
### 标记为不感兴趣方法实现
|
||||
```python
|
||||
def mark_as_not_interested(self):
|
||||
"""将选中的项目标记为不感兴趣"""
|
||||
# 获取选中的行
|
||||
selected_rows = set()
|
||||
for item in self.table.selectedItems():
|
||||
selected_rows.add(item.row())
|
||||
|
||||
# 如果没有选中的行,直接返回
|
||||
if not selected_rows:
|
||||
QMessageBox.information(self, "提示", "请先选中要标记的行")
|
||||
return
|
||||
|
||||
# 弹出确认对话框
|
||||
reply = QMessageBox.question(
|
||||
self,
|
||||
"确认标记",
|
||||
f"确定要将选中的 {len(selected_rows)} 行标记为不感兴趣吗?",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.Yes
|
||||
)
|
||||
|
||||
if reply == QMessageBox.No:
|
||||
return
|
||||
|
||||
try:
|
||||
# 连接数据库
|
||||
conn = sqlite3.connect(self.db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 更新选中的行
|
||||
updated_count = 0
|
||||
for row in selected_rows:
|
||||
# 获取ID
|
||||
id_item = self.table.item(row, 0)
|
||||
if id_item:
|
||||
article_id = id_item.text()
|
||||
# 更新数据库中的is_interested字段
|
||||
cursor.execute("UPDATE articles SET is_interested = 0 WHERE id = ?", (article_id,))
|
||||
|
||||
# 更新表格中的显示
|
||||
interested_item = QTableWidgetItem("否")
|
||||
# 不感兴趣项使用普通字体和颜色
|
||||
self.table.setItem(row, 5, interested_item)
|
||||
|
||||
updated_count += 1
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
# 更新状态栏
|
||||
self.status_bar.showMessage(f"已标记 {updated_count} 行为不感兴趣")
|
||||
|
||||
except sqlite3.Error as e:
|
||||
logger.error(f"标记数据时出错: {str(e)}")
|
||||
QMessageBox.critical(self, "数据库错误", f"标记数据时出错: {str(e)}")
|
||||
self.status_bar.showMessage("标记失败")
|
||||
except Exception as e:
|
||||
logger.error(f"标记数据时出错: {str(e)}")
|
||||
QMessageBox.critical(self, "错误", f"标记数据时出错: {str(e)}")
|
||||
self.status_bar.showMessage("标记失败")
|
||||
```
|
||||
|
||||
## 测试
|
||||
|
||||
测试脚本`test_mark_not_interested.py`验证了"标记为不感兴趣"功能的正确性。测试结果显示功能正常工作,能够正确地将项目标记为不感兴趣,并更新数据库和界面显示。
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 右键菜单操作前必须先选中要操作的项目
|
||||
2. 删除操作不可撤销,请谨慎使用
|
||||
3. 标记操作会直接更新数据库,确保操作前已确认选择
|
||||
4. 批量操作时,所有选中的项目都会被同时处理
|
||||
|
||||
## 更新记录
|
||||
|
||||
- 2023-11-07:添加"标记为不感兴趣"功能到右键菜单
|
||||
- 2023-11-07:完成功能测试和文档编写
|
||||
Reference in New Issue
Block a user