【问题标题】:How to update Pdf_view in tkinter?如何在 tkinter 中更新 Pdf_view?
【发布时间】:2021-09-10 11:49:43
【问题描述】:

我的代码

from tkinter import *
import tkinter as tk
from tkinter.filedialog import *
from tkPDFViewer import tkPDFViewer as pdf

def donothing():
   x = 0
def open():
    file=askopenfile()
    v1 = pdf.ShowPdf()
    v2 = v1.pdf_view(root,
                    pdf_location = file,
                    width = 200, height = 100)
    v2.pack()
root = Tk()
root.state('zoomed')
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=donothing)
filemenu.add_command(label="Open", command=open)
filemenu.add_command(label="Save", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Help Index", command=donothing)
helpmenu.add_command(label="About...", command=donothing)
menubar.add_cascade(label="Help", menu=helpmenu)

root.config(menu=menubar)
root.mainloop()

如果你打开第一个 pdf 文件,它的词非常好。但是 当您打开其他 pdf 文件时,它没有更新。那么我该如何解决呢?谢谢

【问题讨论】:

    标签: pdf tkinter


    【解决方案1】:

    首先,每次调用 pdf_view(...) 时,都会创建一个新的 tkinter Frame 实例和 pack(),因此 Frame 的第二个实例被打包在第一个实例之下。但是由于第一个Frame 有点长,所以第二个超出了可视区域,所以你看不到它。你可以通过使用较小的height来看到第二个,例如从100变为50,然后你可以看到两个框架。

    要解决此问题,您需要销毁 Frame 的第一个实例。此外tkPDFViewer 使用类变量img_object_lilist)来存储所有图像(从 PDF 文件中提取),因此您需要在打开另一个 PDF 文件之前将其清除:

    v2 = None  # change v2 to global variable
    
    def open():
        global v2
        file = askopenfile()
        if file:
            # if old instance exists, destroy it first
            if v2:
                v2.destroy()
            v1 = pdf.ShowPdf()
            # clear the stored image list
            v1.img_object_li.clear()
            # shows the new images extracted from PDF file
            v2 = v1.pdf_view(root, pdf_location=file, width=200, height=50) # smaller height
            v2.pack()
    

    【讨论】:

    • 非常有用,因为这远非直观。你知道我在哪里可以找到关于 tkPDFViewer 的任何文档吗?我只找到了一个微不足道的例子。
    • @JackGriffin 可以简单的看一下它的代码,不难理解。
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2011-01-24
    • 2014-02-10
    • 2019-02-10
    • 2015-12-08
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多