87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
from PySide6.QtCore import Signal
|
|
from PySide6.QtWidgets import (
|
|
QMainWindow, QWidget, QVBoxLayout, QComboBox, QListWidget,
|
|
QLineEdit, QHBoxLayout, QPushButton, QMessageBox
|
|
)
|
|
# By ChatGPT
|
|
class ExifEditor(QMainWindow):
|
|
# Signal to emit the updated EXIF data
|
|
exif_data_updated = Signal(dict)
|
|
|
|
def __init__(self, exif_data):
|
|
super().__init__()
|
|
self.exif_data = exif_data
|
|
self.current_key = None
|
|
|
|
self.setWindowTitle("EXIF Editor")
|
|
self.resize(400, 300)
|
|
|
|
# Main widget and layout
|
|
main_widget = QWidget()
|
|
main_layout = QVBoxLayout()
|
|
main_widget.setLayout(main_layout)
|
|
self.setCentralWidget(main_widget)
|
|
|
|
# ComboBox to select lists
|
|
self.combo_box = QComboBox()
|
|
self.combo_box.addItems(self.exif_data.keys())
|
|
self.combo_box.currentTextChanged.connect(self.load_list)
|
|
main_layout.addWidget(self.combo_box)
|
|
|
|
# List widget to display items
|
|
self.list_widget = QListWidget()
|
|
main_layout.addWidget(self.list_widget)
|
|
|
|
# Line edit for adding items
|
|
self.line_edit = QLineEdit()
|
|
self.line_edit.setPlaceholderText("Enter new item...")
|
|
main_layout.addWidget(self.line_edit)
|
|
|
|
# Buttons: Add, Delete, Cancel
|
|
button_layout = QHBoxLayout()
|
|
self.add_button = QPushButton("Add")
|
|
self.add_button.clicked.connect(self.add_item)
|
|
self.delete_button = QPushButton("Delete")
|
|
self.delete_button.clicked.connect(self.delete_item)
|
|
self.cancel_button = QPushButton("Close")
|
|
self.cancel_button.clicked.connect(self.close_editor)
|
|
|
|
button_layout.addWidget(self.add_button)
|
|
button_layout.addWidget(self.delete_button)
|
|
button_layout.addWidget(self.cancel_button)
|
|
main_layout.addLayout(button_layout)
|
|
|
|
# Load the first list by default
|
|
self.load_list(self.combo_box.currentText())
|
|
|
|
def load_list(self, key):
|
|
"""Load the selected list into the list widget."""
|
|
self.current_key = key
|
|
self.list_widget.clear()
|
|
if key in self.exif_data:
|
|
self.list_widget.addItems(self.exif_data[key])
|
|
|
|
def add_item(self):
|
|
"""Add a new item to the selected list."""
|
|
new_item = self.line_edit.text().strip()
|
|
if new_item:
|
|
self.exif_data[self.current_key].append(new_item)
|
|
self.list_widget.addItem(new_item)
|
|
self.line_edit.clear()
|
|
else:
|
|
QMessageBox.warning(self, "Warning", "Cannot add an empty item.")
|
|
|
|
def delete_item(self):
|
|
"""Delete the selected item from the list."""
|
|
selected_item = self.list_widget.currentItem()
|
|
if selected_item:
|
|
item_text = selected_item.text()
|
|
self.exif_data[self.current_key].remove(item_text)
|
|
self.list_widget.takeItem(self.list_widget.row(selected_item))
|
|
else:
|
|
QMessageBox.warning(self, "Warning", "No item selected to delete.")
|
|
|
|
def close_editor(self):
|
|
"""Emit the updated exif_data and close the editor."""
|
|
self.exif_data_updated.emit(self.exif_data)
|
|
self.close()
|