如何在Tkinter GUI Python新增PDF?
本文將教我們如何在 Tkinter GUI 顯示 PDF 檔案。我們將使用 PyMuPDF 庫讀取 pdf 檔案並將其轉換為圖像,然後使用 Tkinter 顯示圖像。
對於我們的任務,我們將執行以下步驟 -
閱讀 PDF 檔案。
定義一個變換矩陣,套用於 PDF 頁面以取得影像。
計算總頁數以進行錯誤檢查。
定義 GUI 的畫面(畫布)。
定義一個輔助函數,用於將 PDF 頁面轉換為 PIL 影像。
定義一個函數以在 GUI 中顯示頁面圖像。
新增按鈕、標籤、捲軸等並配置它們。
首先,我們首先在終端機中執行以下命令來安裝 PyMuPDF 套件。
python -m pip install --upgrade pip python -m pip install --upgrade pymupdf
現在我們需要導入我們將使用的函式庫。導入菲茨
import fitz from tkinter import * from PIL import Image, ImageTk
這裡的 fitz 是一個實用程式庫,與 PyMuPDF 庫一起提供,用於將 PDF 頁面獲取為圖像。
我們首先使用 fitz.open 函數開啟要在 GUI 中顯示的 PDF 檔案。這將傳回一個可用於存取頁面的文件物件。
# open pdf file file_name = "sample.pdf" doc = fitz.open(file_name)
現在我們需要指定如何查看頁面。透過定義下面的矩陣函數,我們可以「fitz」來保持 1 倍縮放。
# transformation matrix we can apply on pages zoom = 1 mat = fitz.Matrix(zoom, zoom)
讓我們也計算一下頁數 -
# count number of pages num_pages = 0 for p in doc: num_pages += 1
現在我們將定義一個螢幕,為我們的程式碼添加一個捲軸和一個畫布 -
# 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)
這裡我們的螢幕由名稱「root」表示,尺寸為 750x700。我們還添加了一個滾動條,並指定它位於右側並填充整個高度。同樣,我們將畫布添加到左側並在兩側填充整個螢幕!
為了接收使用者想要閱讀的頁碼,我們需要將頁碼作為輸入。我們可以這樣做 -
# define entry point (field for taking inputs) entry = Entry(root)
# add a label for the entry point label = Label(root, text="Enter page number to display:")
參數「root」告訴我們這些物件將與螢幕「root」相關聯。
現在我們將定義一個輔助函數來從頁碼中取得 PDF 檔案的圖像。
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)
這裡我們先使用 doc.load_page 載入頁面並將頁碼傳遞為參數。然後我們轉換 PDF 頁面以在第二行中獲取該頁面的像素表示。最後,我們將像素表示轉換為 PIL 影像格式。
現在我們定義一個函數 show_image 來在 Tkinter GUI 中顯示圖像。
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
首先,我們從先前定義的入口點讀取頁碼並將其轉換為整數。如果它不是有效的整數,則會發生異常,並且異常區塊會處理它。然後我們檢查頁碼是否在 0 或頁數之間,因為這是我們可以顯示的唯一有效的頁面範圍。然後使用我們之前定義的輔助函數,我們獲得使用者指定頁面的 PIL 映像。然後我們設定框架、面板和畫布以正確顯示該圖像。
接下來我們新增一個按鈕來顯示頁面。我們將函數“show_image”作為命令傳遞。因此,每當按下按鈕時,都會呼叫“show_image”函數。
# add button to display pages button = Button(root, text="Show Page", command=show_image)
現在我們設定之前定義的各種元件的視覺位置 -
# set visual locations label.pack(side=TOP, fill=None) entry.pack(side=TOP, fill=BOTH) button.pack(side=TOP, fill=None)
我們也將初始頁面設定為 PDF 的第一頁,如下 -
entry.insert(0, '1') show_image()
我們設定滾動條
scrollbar.config(command = canvas.yview) root.mainloop()
最後我們關閉 PDF,以免它被我們的電腦損壞。
doc.close()
輸出
運行程式後我們會看到以下輸出!

結論
本文教我們如何使用 PyMuPDF 函式庫以及 Pillow 和 Tkinter 在 Tkinter GUI 中顯示 PDF 檔案。我們也了解如何計算頁數、將 PDF 頁面轉換為圖像、製作互動式按鈕以及如何直觀地放置構成 GUI 的不同元素。
以上是如何在Tkinter GUI Python新增PDF?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...
