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-1.0.0.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-1.0.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file tkpdfviewer3-1.0.0.tar.gz.

File metadata

  • Download URL: tkpdfviewer3-1.0.0.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-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e270ab40731b5d233438ec3e4f82b47bd566d4f95efdf36b50a411fd56e95d4b
MD5 e0632610554cbadd73244c1378f1bf82
BLAKE2b-256 679a6c3921a872d5bab396d352a26b12be625c2812b6c0837e1984a5d3292c12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tkpdfviewer3-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36ff60c3b8c3cc041ca37e707b5a9fb27b1237cdeab9ad90e31152a0252b357d
MD5 f87ca2fa637ef5b4d050a1b482e8bcfb
BLAKE2b-256 5f17a964b161ad10dff0b4565830766d30f9d9d79a09f4df807eefac08c07446

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