PDF-Datei in einer von QT Designer generierten Form anzeigen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Easter Frisian
User
Beiträge: 2
Registriert: Samstag 8. November 2025, 19:54

Ich komme aus Richtung MS Visual Studio. Leider sind die Möglichkeiten einer solchen IDE nicht zur Programmierung von Python verfügbar, aber Python ist genau das, was ich momentan programmiere. Ich nutze dazu IDLE und QT Designer auf einer Linux-Maschine.

Ich habe also in QT Designer eine Form generiert, in welcher ich ein QWidget eingefügt habe, welche ich u. a. mit einem Platzhalter für benutzerdefinierte Widgets versehen habe - dem QPdfView. Alles andere funktioniert einwandfrei. Ich kann Daten aus einer SQLite-DB nutzen, ich kann Listen generieren, ich kann beim Klick auf die Listen Aktionen ausführen - nur das Anzeigen einer simplen PDF-Datei funktioniert nicht.

Das QWidget hat die erforderlichen Methoden, wie z. B. "setPageMode(QPdfView.PageMode.MultiPage)", lt. IDLE nicht.

Die kennzeichnenden Stellen in der Form sind:

self.QWidget = QPdfView(Dialog)
self.QWidget.setObjectName(u"qwidget")

Ich kann weder mit dem Widget noch mit dem Objektnamen irgendwas veranstalten. Was übersehe ich denn hier? Bei einem Test mit einem Platzhalter für eine QWebEngine konnte ich ohne Weiteres Internet-Seiten anzeigen. Ein Anzeigen von PDF-Dateien hat auch hier nicht funktioniert.

Beispiele ohne vorgefertigte Form, in welcher die Form zur Laufzeit erstellt wird, funktionieren ja schließlich auch.
Sirius3
User
Beiträge: 18325
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sieht Dein Code aus? Welche Fehlermeldung erhältst Du? Bitte den exakten Stacktrace posten.
Easter Frisian
User
Beiträge: 2
Registriert: Samstag 8. November 2025, 19:54

Ich habe das Problem anders gelöst. Ich benutze nun QWebEngineView zur Anzeige der PDF und dort fehlte mir bei meinen ersten Versuchen noch der Import von den QWebEngineSettings.

Also:

from PySide6.QtWebEngineCore import QWebEngineSettings

Nun kann ich mit

web=frm_main.qwidget #Hier ist mein Widget deklariert
web.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) #Hier sind die Settings

Die erforderlichen Settings setzen, damit auch PDF-Dateien angezeigt werden können.

Danach funktioniert die Anzeige mit

web.setUrl("file://" + file_path) #Aufruf der lokalen PDF-Datei

einwandfrei.

Danke für Deine Antwort!
Benutzeravatar
__blackjack__
User
Beiträge: 14223
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Easter Frisian: URIs sind genau wie Dateipfade nicht einfach Zeichenketten. Die müssen bestimmten Regeln folgen. `pathlib.Path` hat eine `as_uri()`-Methode.
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Antworten