如何在Tkinter GUI Python新增PDF?

王林
發布: 2023-09-08 08:29:01
轉載
1103 人瀏覽過

本文將教我們如何在 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()
登入後複製

輸出

運行程式後我們會看到以下輸出!

如何在Tkinter GUI Python中添加PDF?

結論

本文教我們如何使用 PyMuPDF 函式庫以及 Pillow 和 Tkinter 在 Tkinter GUI 中顯示 PDF 檔案。我們也了解如何計算頁數、將 PDF 頁面轉換為圖像、製作互動式按鈕以及如何直觀地放置構成 GUI 的不同元素。

以上是如何在Tkinter GUI Python新增PDF?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!