显示PDF在单独的窗口与python tkinter



我有一个函数检查tkinter listbox元素是否是pdf文件。如果是,它应该通过ShowPdf"显示在新窗口中。我只想看我选择的一个pdf文件。

使用一次函数就可以了。但是,如果我切换到另一个列表框元素并再次运行该函数,则第一次运行和第二次运行的pdf将被排列在彼此后面。所以我首先看到的是第一次运行的pdf,然后是第二个pdf。如果我第三次运行它,那么所有三个pdf文件将被排列在彼此后面,等等。

你能帮我只显示当前的pdf吗?

import tkinter as tk
from tkPDFViewer import tkPDFViewer as pdf
def OnEntryLeft(event):
cur_file=listb.get(listb.curselection())
if (cur_file[-4:]==".pdf" or cur_file[-4:]==".PDF"):
newWindow = tk.Toplevel(root)
pdf.ShowPdf().pdf_view(newWindow,pdf_location=cur_file,width=75,height=100).pack()
else:
messagebox.showinfo("PDF-Check", "NO pdf")

如果您查看tkPDFViwer的源代码,您将注意到ShowPdf使用一个类变量img_object_li(类型为list)来存储从PDF文件加载的页面。因此,ShowPdf.img_object_li将保存ShowPdf实例中的所有页面。我认为这是一个设计错误。

您需要在加载PDF文件之前清除列表:

pdf.ShowPdf.img_object_li.clear() # clear loaded pages
pdf.ShowPdf().pdf_view(newWindow,pdf_location=cur_file,width=75,height=100).pack()

最新更新