From 656f9e3b1178d567bdb47237a9c50689b69c2747 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Sun, 14 Dec 2025 20:12:40 +0100 Subject: [PATCH] PDF-Viewer-Fehler behoben: Mehrfaches Laden von PDFs funktioniert jetzt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: - fullsize_label wird nach _clear_layout korrekt auf None gesetzt - Verhindert, dass beim zweiten PDF-Laden kein Widget erstellt wird - RuntimeError-Handling für gelöschte C++-Widgets in update_current_display() - Verbessertes Error-Logging mit logger.error() statt print() Problem: Nach dem ersten PDF-Laden wurden weitere PDFs nicht mehr angezeigt, da fullsize_label auf ein gelöschtes Widget zeigte und kein neues erstellt wurde. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- src/ui/MainWindow.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index 598143d..45f1168 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -615,7 +615,7 @@ class MainWindow(QMainWindow): print(f"Performance: Seite {page_num + 1} gerendert in {render_time:.3f}s") except Exception as e: - print(f"Fehler beim Rendern der Seite {page_num + 1}: {e}") + logger.error(f"Fehler beim Rendern der Seite {page_num + 1}: {e}", exc_info=True) def update_current_display(self): """ @@ -630,24 +630,29 @@ class MainWindow(QMainWindow): print("Fullsize-Label ist nicht verfügbar") return - # Hole die gecachten Pixmaps - ref_pixmap = self.current_rendered_pixmaps["ref"] - diff_pixmap = self.current_rendered_pixmaps["diff"] - new_pixmap = self.current_rendered_pixmaps["new"] + try: + # Hole die gecachten Pixmaps + ref_pixmap = self.current_rendered_pixmaps["ref"] + diff_pixmap = self.current_rendered_pixmaps["diff"] + new_pixmap = self.current_rendered_pixmaps["new"] - # Erstelle das überlagerte Bild mit aktuellem Alpha-Wert - alpha_value = self.ui.alpha.value() - layered_pixmap = self.create_layered_pixmap(ref_pixmap, diff_pixmap, new_pixmap, alpha_value) + # Erstelle das überlagerte Bild mit aktuellem Alpha-Wert + alpha_value = self.ui.alpha.value() + layered_pixmap = self.create_layered_pixmap(ref_pixmap, diff_pixmap, new_pixmap, alpha_value) - # Wende aktuellen Zoom an - zoom_factor = self.current_zoom / 100.0 - if zoom_factor != 1.0: - new_width = int(layered_pixmap.width() * zoom_factor) - layered_pixmap = layered_pixmap.scaledToWidth(new_width, Qt.TransformationMode.SmoothTransformation) + # Wende aktuellen Zoom an + zoom_factor = self.current_zoom / 100.0 + if zoom_factor != 1.0: + new_width = int(layered_pixmap.width() * zoom_factor) + layered_pixmap = layered_pixmap.scaledToWidth(new_width, Qt.TransformationMode.SmoothTransformation) - # Setze das überlagerte Bild - self.fullsize_label.setPixmap(layered_pixmap) - self.fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter) + # Setze das überlagerte Bild + self.fullsize_label.setPixmap(layered_pixmap) + self.fullsize_label.setAlignment(Qt.AlignmentFlag.AlignHCenter) + except RuntimeError as e: + # C++-Objekt wurde bereits gelöscht + logger.warning(f"Fullsize-Label wurde bereits gelöscht: {e}") + self.fullsize_label = None def create_layered_pixmap(self, ref_pixmap, diff_pixmap, new_pixmap, alpha_value): """ @@ -1382,6 +1387,7 @@ class MainWindow(QMainWindow): self.thumbnail_to_page = {} self.pdf_documents = {} self.current_rendered_pixmaps = None + self.fullsize_label = None # Label wurde durch _clear_layout gelöscht # Alle drei PDF-Dateien öffnen mit QtPdf diff_doc = QPdfDocument()