Inhaltsverzeichnis
Ausgabe
Fazit
Heim Backend-Entwicklung Python-Tutorial Wie füge ich PDF in Tkinter GUI Python hinzu?

Wie füge ich PDF in Tkinter GUI Python hinzu?

Sep 08, 2023 am 08:29 AM

In diesem Artikel erfahren Sie, wie Sie PDF-Dateien in der Tkinter-GUI anzeigen. Wir werden die PyMuPDF-Bibliothek verwenden, um die PDF-Datei zu lesen und in ein Bild zu konvertieren, und dann Tkinter verwenden, um das Bild anzuzeigen.

Für unsere Aufgabe werden wir die folgenden Schritte ausführen -

  • PDF-Dateien lesen.

  • Definieren Sie eine Transformationsmatrix, die auf die PDF-Seite angewendet werden soll, um das Bild zu erhalten.

  • Berechnen Sie die Gesamtseitenzahl für die Fehlerprüfung.

  • Definieren Sie den Bildschirm (Canvas) der GUI.

  • Definieren Sie eine Hilfsfunktion zum Konvertieren von PDF-Seiten in PIL-Bilder.

  • Definieren Sie eine Funktion zum Anzeigen des Seitenbilds in der GUI.

  • Fügen Sie Schaltflächen, Beschriftungen, Bildlaufleisten usw. hinzu und konfigurieren Sie sie.

Zuerst führen wir zunächst den folgenden Befehl im Terminal aus, um das PyMuPDF-Paket zu installieren.

python -m pip install --upgrade pip
python -m pip install --upgrade pymupdf
Nach dem Login kopieren

Jetzt müssen wir die Bibliotheken importieren, die wir verwenden werden. Fitz importieren

import fitz
from tkinter import *
from PIL import Image, ImageTk
Nach dem Login kopieren

Hier handelt es sich um eine Hilfsbibliothek, die mit der PyMuPDF-Bibliothek bereitgestellt wird, um PDF-Seiten als Bilder zu erhalten.

Wir verwenden zunächst die Funktion fitz.open, um die PDF-Datei zu öffnen, die in der GUI angezeigt werden soll. Dadurch wird ein Dokumentobjekt zurückgegeben, mit dem auf die Seite zugegriffen werden kann.

# open pdf file
file_name = "sample.pdf"
doc = fitz.open(file_name)
Nach dem Login kopieren

Jetzt müssen wir angeben, wie die Seite angezeigt werden soll. Durch die Definition der Matrixfunktion unten können wir „fittun“, um eine 1x-Skalierung beizubehalten.

# transformation matrix we can apply on pages
zoom = 1
mat = fitz.Matrix(zoom, zoom)
Nach dem Login kopieren

Lassen Sie uns auch die Anzahl der Seiten zählen –

# count number of pages
num_pages = 0
for p in doc:
num_pages += 1
Nach dem Login kopieren

Jetzt definieren wir einen Bildschirm, fügen unserem Code eine Bildlaufleiste und eine Leinwand hinzu -

# initialize and set screen size
root = Tk()
root.geometry('750x700')

# add scroll bar
scrollbar = Scrollbar(root)
scrollbar.pack(side = RIGHT, fill = Y)

# add canvas
canvas = Canvas(root, yscrollcommand = scrollbar.set)
canvas.pack(side = LEFT, fill = BOTH, expand = 1)
Nach dem Login kopieren

Hier wird unser Bildschirm durch den Namen „root“ dargestellt und hat die Abmessungen 750x700. Wir haben auch eine Bildlaufleiste hinzugefügt und festgelegt, dass sie sich rechts befindet und die gesamte Höhe ausfüllt. Auch hier fügen wir die Leinwand links hinzu und füllen den gesamten Bildschirm auf beiden Seiten aus!

Um die Seitenzahl zu erhalten, die der Benutzer lesen möchte, benötigen wir die Seitenzahl als Eingabe. Wir schaffen das –

# define entry point (field for taking inputs)
entry = Entry(root)
Nach dem Login kopieren
# add a label for the entry point
label = Label(root, text="Enter page number to display:")
Nach dem Login kopieren

Der Parameter „root“ sagt uns, dass diese Objekte mit dem Bildschirm „root“ verknüpft werden.

Jetzt definieren wir eine Hilfsfunktion, um das Bild der PDF-Datei aus der Seitenzahl zu ermitteln.

def pdf_to_img(page_num):
page = doc.load_page(page_num)
pix = page.get_pixmap(matrix=mat)
return Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
Nach dem Login kopieren

Hier laden wir zunächst die Seite mit doc.load_page und übergeben die Seitenzahl als Parameter. Anschließend konvertieren wir die PDF-Seite, um die Pixeldarstellung der Seite in der zweiten Zeile zu erhalten. Schließlich konvertieren wir die Pixeldarstellung in das PIL-Bildformat.

Jetzt definieren wir eine Funktion show_image, um Bilder in der Tkinter-GUI anzuzeigen.

def show_image():
try:
page_num = int(entry.get()) - 1
assert page_num >= 0 and page_num < num_pages
im = pdf_to_img(page_num)
img_tk = ImageTk.PhotoImage(im)
frame = Frame(canvas)
panel = Label(frame, image=img_tk)
panel.pack(side="bottom", fill="both", expand="yes")
frame.image = img_tk
canvas.create_window(0, 0, anchor='nw', window=frame)
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
except:
pass
Nach dem Login kopieren

Zuerst lesen wir die Seitenzahl vom zuvor definierten Einstiegspunkt und wandeln sie in eine Ganzzahl um. Wenn es sich nicht um eine gültige Ganzzahl handelt, tritt eine Ausnahme auf und der Ausnahmeblock behandelt sie. Anschließend prüfen wir, ob die Seitenzahl zwischen 0 und Seitenzahl liegt, da dies der einzige gültige Seitenbereich ist, den wir anzeigen können. Mithilfe der zuvor definierten Hilfsfunktion erhalten wir dann das PIL-Bild der vom Benutzer angegebenen Seite. Anschließend richten wir Rahmen, Panel und Leinwand ein, um das Bild korrekt anzuzeigen.

Als nächstes fügen wir eine Schaltfläche hinzu, um die Seite anzuzeigen. Wir übergeben die Funktion „show_image“ als Befehl. Bei jedem Tastendruck wird also die Funktion „show_image“ aufgerufen.

# add button to display pages
button = Button(root, text="Show Page", command=show_image)
Nach dem Login kopieren

Jetzt legen wir die visuelle Position der verschiedenen Komponenten fest, die wir zuvor definiert haben –

# set visual locations
label.pack(side=TOP, fill=None)
entry.pack(side=TOP, fill=BOTH)
button.pack(side=TOP, fill=None)
Nach dem Login kopieren

Wir legen die Startseite auch wie folgt als erste Seite des PDFs fest:

entry.insert(0, '1')
show_image()
Nach dem Login kopieren

Wir konfigurieren die Bildlaufleiste

scrollbar.config(command = canvas.yview)
root.mainloop()
Nach dem Login kopieren

Abschließend schließen wir das PDF, um zu verhindern, dass es von unserem Computer beschädigt wird.

doc.close()
Nach dem Login kopieren

Ausgabe

Nach dem Ausführen des Programms sehen wir die folgende Ausgabe!

如何在Tkinter GUI Python中添加PDF?

Fazit

In diesem Artikel lernen wir, wie man PDF-Dateien in der Tkinter-GUI mithilfe der PyMuPDF-Bibliothek zusammen mit Pillow und Tkinter anzeigt. Wir haben auch gelernt, wie man Seiten zählt, PDF-Seiten in Bilder umwandelt, interaktive Schaltflächen erstellt und wie man die verschiedenen Elemente, aus denen eine GUI besteht, visuell platziert.

Das obige ist der detaillierte Inhalt vonWie füge ich PDF in Tkinter GUI Python hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

Wie bekomme ich Nachrichtendaten, die den Anti-Crawler-Mechanismus von Investing.com umgehen? Wie bekomme ich Nachrichtendaten, die den Anti-Crawler-Mechanismus von Investing.com umgehen? Apr 02, 2025 am 07:03 AM

Verständnis der Anti-Crawling-Strategie von Investing.com Viele Menschen versuchen oft, Nachrichten von Investing.com (https://cn.investing.com/news/latest-news) zu kriechen ...

See all articles