使用 python tkinter 在单独的 window 中显示 pdf

display pdf in sepearate window with python tkinter

我有一个检查 tkinter 列表框元素是否为 pdf 文件的功能。如果是这样,它应该通过新 window 中的“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 使用 class 变量 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()