我是python的新手,想要构建一个可以让你跳过不同pdf的gui。我设法显示了第一个pdf。我现在的问题是,我不能设法显示第二个pdf和所有以下内容。如果我只重复命令来显示pdf,新的pdf会显示在旧的旁边,而不是替换它。我花了几个小时大量的谷歌搜索,却找不到解决这个问题的方法。也许有人能帮上忙?
下面是我的代码:
from tkinter import *
import tkinter as tk
import glob
from tkPDFViewer import tkPDFViewer as pdf
from tkdocviewer import *
parent_path = 'somepath\\'
doc_list = glob.glob((parent_path + "*//*.pdf"))
doc_counter = 0
root = tk.Tk()
root.title('Training Data Creator')
root.geometry("1000x1000")
frame_r = Frame(root, relief=RAISED, borderwidth=1)
frame_r.pack(fill=BOTH, expand=True, side=tk.LEFT)
# creating object of ShowPdf from tkPDFViewer.
pdf_show = pdf.ShowPdf()
# Adding pdf location and width and height.
V_pdf = pdf_show.pdf_view(master=frame_r,
pdf_location=(doc_list[doc_counter]),
width=90, height=100)
V_pdf.pack(side=tk.LEFT)
#button skip
def skip_callback():
global doc_counter
doc_counter = doc_counter +1
# Here I want to display the next PDF!!
V_pdf = pdf_show.pdf_view(master=frame_r,
pdf_location=(doc_list[doc_counter]),
width=90, height=100)
V_pdf.pack()
print(doc_counter)
button_skip = Button(root, text='skip', command= skip_callback)
button_skip.pack(fill=tk.X, pady=0)
root.mainloop()当我点击“跳过”按钮时,来自“parent_path”的下一个pdf应该出现在最初显示的地方。
感谢您的帮助!
浮点
发布于 2021-08-12 09:18:36
我研究过tkPDFViewer's code,ShowPdf类并没有被设计为在最初的文档之后加载一个新文档。
第二个文件显示在第一个文件旁边的原因是,pdf_show.pdf_view()创建了一个新的Frame,然后将其打包到前一个文件的右侧。所以你需要先毁掉原来的那个
pdf_show.frame.destroy()然后,我注意到,当单击跳过按钮时,不是显示第二个文档,而是显示两个文档的串联。这可以通过清除pdf_show的镜像列表来解决
pdf_show.img_object_li.clear()下面是完整的代码:
import tkinter as tk
import glob
from tkPDFViewer import tkPDFViewer as pdf
parent_path = '/home/juliette/Documents'
doc_list = glob.glob((parent_path + "*//*.pdf"))
doc_counter = 0
root = tk.Tk()
root.title('Training Data Creator')
root.geometry("1000x1000")
frame_r = tk.Frame(root, relief=tk.RAISED, borderwidth=1)
frame_r.pack(fill=tk.BOTH, expand=True, side=tk.LEFT)
# creating object of ShowPdf from tkPDFViewer.
pdf_show = pdf.ShowPdf()
# Adding pdf location and width and height.
V_pdf = pdf_show.pdf_view(master=frame_r,
pdf_location=(doc_list[doc_counter]),
width=90, height=100)
V_pdf.pack(side=tk.LEFT)
#button skip
def skip_callback():
global doc_counter
doc_counter = doc_counter +1
# Reset view:
pdf_show.frame.destroy()
pdf_show.img_object_li.clear()
# Display new pdf
V_pdf = pdf_show.pdf_view(master=frame_r,
pdf_location=(doc_list[doc_counter]),
width=90, height=100)
V_pdf.pack(side=tk.LEFT)
print(doc_counter)
button_skip = tk.Button(root, text='skip', command= skip_callback)
button_skip.pack(fill=tk.X, pady=0)
root.mainloop()顺便说一句,您正在导入tkinter两次:
from tkinter import *
import tkinter as tk因此,我建议您选择其中一种方法来导入并坚持使用,而不是将两者混合在一起。此外,我建议你使用import tkinter as tk,这样你就不会用大量的未知名称挤占命名空间,这可能会导致命名冲突(例如,如果你从PIL导入Image,然后执行from tkinter import *,Image将是tkinter类,而不是PIL )。
https://stackoverflow.com/questions/68753733
复制相似问题