diff --git a/main.py b/main.py index d1d3c76..0428dec 100644 --- a/main.py +++ b/main.py @@ -603,6 +603,9 @@ class MainWindow(QMainWindow): # 初始化默认识别方法(CRNN)的模型 self.change_recognition_method(self.current_recognition_method) + + # 加载白名单 + self.load_whitelist() def init_ui(self): @@ -815,8 +818,29 @@ class MainWindow(QMainWindow): """) self.remove_whitelist_button.clicked.connect(self.remove_from_whitelist) + self.edit_whitelist_button = QPushButton("编辑") + self.edit_whitelist_button.setFixedSize(60, 32) + self.edit_whitelist_button.setStyleSheet(""" + QPushButton { + background-color: #ffc107; + color: #212529; + border: none; + border-radius: 4px; + font-size: 12px; + font-weight: 500; + } + QPushButton:hover { + background-color: #e0a800; + } + QPushButton:pressed { + background-color: #d39e00; + } + """) + self.edit_whitelist_button.clicked.connect(self.edit_whitelist_item) + input_row.addWidget(self.whitelist_input) input_row.addWidget(self.add_whitelist_button) + input_row.addWidget(self.edit_whitelist_button) input_row.addWidget(self.remove_whitelist_button) # 白名单列表 @@ -1627,18 +1651,98 @@ class MainWindow(QMainWindow): except Exception as e: print(f"发送道闸命令失败: {e}") + def save_whitelist(self): + """保存白名单到文件""" + try: + whitelist_file = os.path.join(os.path.dirname(__file__), 'whitelist.json') + with open(whitelist_file, 'w', encoding='utf-8') as f: + json.dump(list(self.whitelist), f, ensure_ascii=False, indent=2) + print(f"白名单已保存到: {whitelist_file}") + return True + except Exception as e: + print(f"保存白名单失败: {e}") + return False + + def load_whitelist(self): + """从文件加载白名单""" + try: + whitelist_file = os.path.join(os.path.dirname(__file__), 'whitelist.json') + if os.path.exists(whitelist_file): + with open(whitelist_file, 'r', encoding='utf-8') as f: + whitelist_data = json.load(f) + if isinstance(whitelist_data, list): + self.whitelist = set(whitelist_data) + # 更新显示 + self.whitelist_display.clear() + for plate in self.whitelist: + self.whitelist_display.addItem(plate) + print(f"白名单已从文件加载,共 {len(self.whitelist)} 个车牌") + return True + else: + print("白名单文件格式错误") + return False + else: + print("白名单文件不存在,使用空白名单") + return False + except Exception as e: + print(f"加载白名单失败: {e}") + return False + def add_to_whitelist(self): - """添加车牌到白名单""" + """添加或修改白名单车牌""" plate_number = self.whitelist_input.text().strip().upper() - if plate_number and plate_number not in self.whitelist: - self.whitelist.add(plate_number) - self.whitelist_display.addItem(plate_number) - self.whitelist_input.clear() - print(f"已添加车牌到白名单: {plate_number}") - elif plate_number in self.whitelist: - print(f"车牌已在白名单中: {plate_number}") - else: + if not plate_number: print("请输入有效的车牌号") + return + + # 检查是否有选中的项(编辑模式) + current_item = self.whitelist_display.currentItem() + if current_item: + # 编辑模式:替换选中的车牌 + old_plate_number = current_item.text() + if old_plate_number != plate_number: + # 如果车牌号有变化,更新白名单和显示 + if plate_number not in self.whitelist: + self.whitelist.discard(old_plate_number) + self.whitelist.add(plate_number) + current_item.setText(plate_number) + print(f"已修改白名单车牌: {old_plate_number} -> {plate_number}") + # 保存到文件 + self.save_whitelist() + else: + print(f"车牌已在白名单中: {plate_number}") + else: + print(f"车牌号未变化: {plate_number}") + else: + # 添加模式:添加新车牌 + if plate_number not in self.whitelist: + self.whitelist.add(plate_number) + self.whitelist_display.addItem(plate_number) + print(f"已添加车牌到白名单: {plate_number}") + # 保存到文件 + self.save_whitelist() + else: + print(f"车牌已在白名单中: {plate_number}") + + # 清空输入框 + self.whitelist_input.clear() + # 取消选择 + self.whitelist_display.clearSelection() + + def edit_whitelist_item(self): + """编辑白名单中选中的车牌""" + current_item = self.whitelist_display.currentItem() + if current_item: + old_plate_number = current_item.text() + # 将选中的车牌号填入输入框 + self.whitelist_input.setText(old_plate_number) + # 聚焦到输入框 + self.whitelist_input.setFocus() + # 选中全部文本,方便用户直接修改 + self.whitelist_input.selectAll() + print(f"正在编辑车牌: {old_plate_number}") + else: + print("请选择要编辑的车牌") def remove_from_whitelist(self): """从白名单中删除选中的车牌""" @@ -1648,6 +1752,8 @@ class MainWindow(QMainWindow): self.whitelist.discard(plate_number) self.whitelist_display.takeItem(self.whitelist_display.row(current_item)) print(f"已从白名单中删除车牌: {plate_number}") + # 保存到文件 + self.save_whitelist() else: print("请选择要删除的车牌")