Skip to main content

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 another tk.Frame).

  • **kwargs: Arbitrary keyword arguments that are passed directly to the tk.Frame constructor. 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 is 1200.

  • height (int): The desired height of the PDF display area within the frame. Default is 600.

  • show_loading_bar (boolean): True or False. If True, a progress bar and message are shown while the PDF is loading. Defaults to True.

  • 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 is 100.

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 as fitz)

  • 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

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

tkpdfviewer3-0.1.5.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tkpdfviewer3-0.1.5-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

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

Hashes for tkpdfviewer3-0.1.5.tar.gz
Algorithm Hash digest
SHA256 4784e13d362c3ad38059efab8fc546cf063801596a57c54c8fa3872c06ac9abd
MD5 bc36f31e5635bd57e3dd43dfb4553f17
BLAKE2b-256 f593d6799f79a31ce5e9c10248571f8f0db0f0ba0fbc54593c2404ca861baca4

See more details on using hashes here.

File details

Details for the file tkpdfviewer3-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for tkpdfviewer3-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 def380e47f5868c6c11bc9196d5aa88b81b53bc80ff81c35d348a7de0bde757c
MD5 1e9ccb24d121465ad5dc70ef91451e11
BLAKE2b-256 14d1f1bd6003bf88f1c2b9cb59aa556fff9ceac43d152543a3080fc106d305db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page