diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index b129ebb..ef8939f 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -3762,8 +3762,33 @@ class MainWindow(QMainWindow): logger.error(f"Fehler beim Übernehmen aller Änderungen: {e}") QMessageBox.critical(self, "Fehler", f"Fehler beim Übernehmen der Änderungen:\n{str(e)}") + def _close_all_pdf_documents(self): + """Schließt alle geöffneten PDF-Dokumente explizit (wichtig für Windows).""" + import gc + + if self.pdf_documents: + for pdf_basename, docs in self.pdf_documents.items(): + for doc_type, doc in docs.items(): + if doc: + doc.close() + logger.debug(f"PDF-Dokument geschlossen: {pdf_basename} ({doc_type})") + + # Lösche alle Referenzen + self.pdf_documents.clear() + + # Lösche gerenderte Pixmaps + self.current_rendered_pixmaps = None + + # Erzwinge Garbage Collection um Dateihandles freizugeben (wichtig für Windows) + gc.collect() + + logger.info("Alle PDF-Dokumente geschlossen und Referenzen freigegeben") + def _clear_pdf_viewer(self): """Leert den PDF-Viewer und alle Thumbnails.""" + # Schließe alle PDF-Dokumente explizit (wichtig für Windows) + self._close_all_pdf_documents() + # Entferne Widgets aus Layouts self._clear_layout(self.ui.verticalLayout_2) self._clear_layout(self.ui.verticalLayout_3) @@ -3809,6 +3834,21 @@ class MainWindow(QMainWindow): QMessageBox.warning(self, "Fehler", f"New-PDF nicht gefunden:\n{pdf_basename}") return + # Schließe alle PDF-Dokumente und leere UI VOR dem Löschen/Verschieben (wichtig für Windows) + self._close_all_pdf_documents() + + # Entferne auch alle Widgets, die Pixmaps enthalten könnten + self._clear_layout(self.ui.verticalLayout_2) + self._clear_layout(self.ui.verticalLayout_3) + self.thumbnail_to_page = {} + self.fullsize_label = None + + # Verarbeite alle pending Qt Events um sicherzustellen, dass Widgets/Ressourcen freigegeben werden + from PySide6.QtWidgets import QApplication + QApplication.processEvents() + + logger.info("PDF-Dokumente geschlossen und UI geleert vor Dateioperationen") + # Lösche alte ref-PDF falls vorhanden if ref_pdf_path.exists(): ref_pdf_path.unlink()