simple tkinter PDF viewer
Project description
tkPDFViewer
The tkPDFViewer is a Python library that allows you to embed PDF files directly into your Tkinter GUI. It's designed for simplicity and ease of use, requiring just a few steps to integrate.
Features!
-
Embed your PDF in your Tkinter GUI.
-
Customize the initial width and height of your PDF display.
-
High-quality PDF page rendering with customizable DPI.
-
Zoom In/Out Functionality:
-
Zoom in/out by pressing
Control+ scrolling the mouse wheel. -
Zoom in by pressing
Control++(plus key). -
Zoom out by pressing
Control+-(minus key).
-
-
Configurable loading bar to show PDF loading progress.
-
Choose between "after" (asynchronous) or "immediate" (synchronous) PDF loading strategies.
Installation
Install tkPDFViewer3 using pip:
pip install tkPDFViewer3
Or using pip3:
pip3 install tkPDFViewer3
You can also install directly from the Git repository (if available, replace with your actual repo URL if different):
pip install git+"[https://github.com/juleslagarde/tkPDFViewer3](https://github.com/juleslagarde/tkPDFViewer3)"
Usage
Here's an example of how to use tkPDFViewer in your Tkinter application:
import tkinter as tk
from tkPDFViewer import PDFViewer # Simplified import!
# --- Create a dummy PDF file for testing (optional, for a runnable example) ---
try:
import fitz # PyMuPDF
dummy_pdf_path = "dummy_example.pdf"
doc = fitz.open() # new empty PDF
page = doc.new_page() # new page
page.insert_text((50, 50), "Hello from tkPDFViewer!", fontname="helv", fontsize=24)
page.insert_text((50, 100), "This is a dummy PDF for demonstration.", fontname="helv", fontsize=16)
page.insert_text((50, 150), "Use Ctrl + MouseWheel or Ctrl + +/- to zoom.", fontname="helv", fontsize=12)
doc.save(dummy_pdf_path)
doc.close()
print(f"Created a dummy PDF at: {dummy_pdf_path}")
except Exception as e:
print(f"Could not create dummy PDF: {e}. Please ensure PyMuPDF (fitz) is installed correctly.")
dummy_pdf_path = None # Set to None if creation fails
if __name__ == "__main__":
root = tk.Tk()
root.title("tkPDFViewer Example")
root.geometry("800x700") # Set a default window size
if dummy_pdf_path:
# 1. Create an instance of the PDFViewer class, inheriting from tk.Frame.
# Pass the master (root) and any tk.Frame specific keyword arguments.
pdf_viewer = PDFViewer(root, bg="lightgray", relief="groove", bd=2)
# 2. Call the display_pdf method to load and show the PDF.
# Pass the PDF location and display-specific configurations.
pdf_viewer.display_pdf(
pdf_location=dummy_pdf_path,
width=780,
height=600,
dpi=120,
show_loading_bar=True,
)
# 3. Pack the PDFViewer instance (which is a tk.Frame) into your GUI.
pdf_viewer.pack(expand=True, fill="both", padx=10, pady=10)
# You can add other Tkinter widgets here if needed
# For example, a button to open a new PDF
open_button = ttk.Button(root, text="Open Another PDF (Not Implemented)",
command=lambda: print("Open PDF functionality would go here"))
open_button.pack(pady=5)
else:
# Display a message if dummy PDF creation failed
error_label = tk.Label(root, text="Error: Could not create dummy PDF. Please provide a valid PDF path.", fg="red")
error_label.pack(pady=20)
root.mainloop()
Attributes and Parameters
The PDFViewer class is a tk.Frame and its functionality is configured via its __init__ method and the display_pdf method.
PDFViewer(master=None, **kwargs) (Constructor Parameters)
These parameters are passed when you create an instance of PDFViewer, similar to any tk.Frame.
-
master: The parent Tkinter widget (e.g.,tk.Tk()or anothertk.Frame). -
**kwargs: Arbitrary keyword arguments that are passed directly to thetk.Frameconstructor. Common examples include:-
width: Initial width of the PDFViewer frame. -
height: Initial height of the PDFViewer frame. -
bg: Background color of the frame. -
relief: Border style (e.g.,"flat","raised","sunken","groove","ridge"). -
bd: Border width.
-
display_pdf(pdf_location, width=1200, height=600, show_loading_bar=True, load_strategy="after", dpi=100) (Method Parameters)
This method is called on your PDFViewer instance to load and display a specific PDF.
-
pdf_location(string): Required. The file path to your PDF document. -
width(int): The desired width of the PDF display area within the frame. Default is1200. -
height(int): The desired height of the PDF display area within the frame. Default is600. -
show_loading_bar(boolean):TrueorFalse. IfTrue, a progress bar and message are shown while the PDF is loading. Defaults toTrue. -
dpi(int): Dots per inch for rendering PDF pages. Higher DPI results in better image quality but consumes more memory and takes longer to load. Default is100.
Layout
To embed your PDFViewer instance into your GUI, use standard Tkinter geometry managers:
-
.pack() -
.grid() -
.place()
Dependencies
-
tkinter(built-in Python GUI library) -
PyMuPDF(for PDF rendering, also known asfitz) -
Pillow(for image manipulation,PIL) -
threading(built-in, for asynchronous loading) -
math(built-in, for calculations) -
platform(built-in, for OS-specific event bindings)
License
MIT
Author
-
Updated by Jules Lagarde
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tkpdfviewer3-0.1.5.tar.gz.
File metadata
- Download URL: tkpdfviewer3-0.1.5.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4784e13d362c3ad38059efab8fc546cf063801596a57c54c8fa3872c06ac9abd
|
|
| MD5 |
bc36f31e5635bd57e3dd43dfb4553f17
|
|
| BLAKE2b-256 |
f593d6799f79a31ce5e9c10248571f8f0db0f0ba0fbc54593c2404ca861baca4
|
File details
Details for the file tkpdfviewer3-0.1.5-py3-none-any.whl.
File metadata
- Download URL: tkpdfviewer3-0.1.5-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
def380e47f5868c6c11bc9196d5aa88b81b53bc80ff81c35d348a7de0bde757c
|
|
| MD5 |
1e9ccb24d121465ad5dc70ef91451e11
|
|
| BLAKE2b-256 |
14d1f1bd6003bf88f1c2b9cb59aa556fff9ceac43d152543a3080fc106d305db
|