如何在 tkinter 中更新 Pdf_view?
How to update Pdf_view in tkinter?
我的代码
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 文件,它的字非常 good.But
当您打开另一个 pdf 文件时,它不是 update.So 我该如何解决?谢谢
首先,每次调用 pdf_view(...)
时,都会创建一个新的 tkinter Frame
实例和 pack()
,因此 Frame
的第二个实例打包在第一个实例下方一。但是由于第一个Frame
有点长,第二个在可视区之外,所以你看不到它。你可以通过使用较小的高度来看到第二个,例如,从100更改为50,然后你可以看到两个框架。
要解决此问题,您需要销毁 Frame
的第一个实例。此外 tkPDFViewer
使用 class 变量 img_object_li
(a list
) 来存储所有图像(从 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()
我的代码
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 文件,它的字非常 good.But 当您打开另一个 pdf 文件时,它不是 update.So 我该如何解决?谢谢
首先,每次调用 pdf_view(...)
时,都会创建一个新的 tkinter Frame
实例和 pack()
,因此 Frame
的第二个实例打包在第一个实例下方一。但是由于第一个Frame
有点长,第二个在可视区之外,所以你看不到它。你可以通过使用较小的高度来看到第二个,例如,从100更改为50,然后你可以看到两个框架。
要解决此问题,您需要销毁 Frame
的第一个实例。此外 tkPDFViewer
使用 class 变量 img_object_li
(a list
) 来存储所有图像(从 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()