使用 python tkinter 在单独的窗口中显示 pdf
Posted
技术标签:
【中文标题】使用 python tkinter 在单独的窗口中显示 pdf【英文标题】:display pdf in sepearate window with python tkinter 【发布时间】:2021-10-22 20:26:30 【问题描述】:我有一个函数检查 tkinter 列表框元素是否为 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")
【问题讨论】:
您可以尝试使用Toplevel
windows 拥有的lift()
和/或lower()
方法来控制它们的堆叠顺序。这是一些documentation。
【参考方案1】:
如果您查看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()
【讨论】:
@JMlevel:见How does accepting an answer work?以上是关于使用 python tkinter 在单独的窗口中显示 pdf的主要内容,如果未能解决你的问题,请参考以下文章
背景在具有 counter-tkinter 的单独窗口中透明
如何在没有按钮的情况下关闭tkinter窗口而不完全关闭Python?