如何在python tkinter mainloop中定义一个列表而不更改它';s值
我试图用python程序来分割PDF文件。因此,我必须定义一个列表来附加元素,但当循环再次迭代时,列表的值将更改为空白列表。因此,该程序将生成一个pdf,其中没有任何内容。这是我的密码如何在python tkinter mainloop中定义一个列表而不更改它';s值,python,pdf,tkinter,pypdf2,Python,Pdf,Tkinter,Pypdf2,我试图用python程序来分割PDF文件。因此,我必须定义一个列表来附加元素,但当循环再次迭代时,列表的值将更改为空白列表。因此,该程序将生成一个pdf,其中没有任何内容。这是我的密码 import tkinter as tk from PIL import Image, ImageTk from PyPDF2 import PdfFileReader, PdfFileWriter from tkinter import filedialog from tkinter import messag
import tkinter as tk
from PIL import Image, ImageTk
from PyPDF2 import PdfFileReader, PdfFileWriter
from tkinter import filedialog
from tkinter import messagebox
elements = []
root7 = tk.Tk()
root7.geometry("600x600")
root7.title("PDF Viewer")
root7.configure(bg="#202020")
image7 = Image.open("split.jpg")
new_img7 = image7.resize((600,400))
photo7 = ImageTk.PhotoImage(new_img7)
def open1():
pdf = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("pdf files","*.pdf"),("all files","*.*")))
elements.append(pdf)
w = tk.Spinbox(root7, from_=0, to=100, width=3)
w.place(x=150, y=510)
elements.append(int(w.get()))
w1 = tk.Spinbox(root7, from_=0, to=100, width=3)
w1.place(x=409, y=510)
elements.append(int(w1.get()))
def split():
pdfs = PdfFileReader(elements[0], "rb")
pdf_writer = PdfFileWriter()
for page in range(elements[1], elements[2]):
pdf_writer.addPage(pdfs.getPage(page))
output_fname = "splitted.pdf"
with open(output_fname, 'wb') as out:
pdf_writer.write(out)
messagebox.showinfo("Splitted","PDF Saved in Desktop as splitted.pdf")
lbl7 = tk.Label(root7,image=photo7)
lbl7.place(x=0, y=0)
button7 = tk.Button(root7, text= 'Open PDF', command=open1, bg="#B8B8B8")
button7.place(width=300, height=50, x=150, y=450)
button8 = tk.Button(root7, text= 'Split PDF', command=split, bg="#B8B8B8")
button8.place(width=300, height=50, x=150, y=540)
root7.update()
root7.mainloop()
有人请帮忙。我终于找到了答案。问题不在于列表,而是在我获取spinbox小部件的初始值时引起的,下面是修改后的代码
import tkinter as tk
from PIL import Image, ImageTk
from PyPDF2 import PdfFileReader, PdfFileWriter
from tkinter import filedialog
from tkinter import messagebox
w = 0
w1 = 0
root7 = tk.Toplevel()
root7.geometry("600x600")
root7.title("PDF Splitter")
root7.configure(bg="#202020")
elements = []
image7 = Image.open("split.jpg")
new_img7 = image7.resize((600,400))
photo7 = ImageTk.PhotoImage(new_img7)
def open1():
global w, w1
pdf = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("pdf files","*.pdf"),("all files","*.*")))
elements.append(pdf)
w = tk.Spinbox(root7, from_=0, to=100, width=3)
w.place(x=150, y=510)
w1 = tk.Spinbox(root7, from_=0, to=100, width=3)
w1.place(x=409, y=510)
elements.append(int(w1.get()))
def split():
global w, w1
pdfs = PdfFileReader(elements[0], "rb")
pdf_writer = PdfFileWriter()
elements.append(int(w.get()))
elements.append(int(w1.get()))
w2 = int(w.get())
w3 = int(w1.get())
for page in range(45):
pdf_writer.addPage(pdfs.getPage(w2-1))
w2+=1
if (w2-1)==(w3):
break
output_fname = "splitted.pdf"
with open(output_fname, 'wb') as out:
pdf_writer.write(out)
messagebox.showinfo("Splitted","PDF Saved in Desktop as splitted.pdf")
lbl7 = tk.Label(root7,image=photo7)
lbl7.place(x=0, y=0)
button7 = tk.Button(root7, text= 'Open PDF', command=open1, bg="#B8B8B8")
button7.place(width=300, height=50, x=150, y=450)
button8 = tk.Button(root7, text= 'Split PDF', command=split, bg="#B8B8B8")
button8.place(width=300, height=50, x=150, y=540)
root7.update()
root7.mainloop()
GUI不太好,但仍然可以工作。我终于找到了答案。问题不在于列表,而是在我获取spinbox小部件的初始值时引起的,下面是修改后的代码
import tkinter as tk
from PIL import Image, ImageTk
from PyPDF2 import PdfFileReader, PdfFileWriter
from tkinter import filedialog
from tkinter import messagebox
w = 0
w1 = 0
root7 = tk.Toplevel()
root7.geometry("600x600")
root7.title("PDF Splitter")
root7.configure(bg="#202020")
elements = []
image7 = Image.open("split.jpg")
new_img7 = image7.resize((600,400))
photo7 = ImageTk.PhotoImage(new_img7)
def open1():
global w, w1
pdf = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("pdf files","*.pdf"),("all files","*.*")))
elements.append(pdf)
w = tk.Spinbox(root7, from_=0, to=100, width=3)
w.place(x=150, y=510)
w1 = tk.Spinbox(root7, from_=0, to=100, width=3)
w1.place(x=409, y=510)
elements.append(int(w1.get()))
def split():
global w, w1
pdfs = PdfFileReader(elements[0], "rb")
pdf_writer = PdfFileWriter()
elements.append(int(w.get()))
elements.append(int(w1.get()))
w2 = int(w.get())
w3 = int(w1.get())
for page in range(45):
pdf_writer.addPage(pdfs.getPage(w2-1))
w2+=1
if (w2-1)==(w3):
break
output_fname = "splitted.pdf"
with open(output_fname, 'wb') as out:
pdf_writer.write(out)
messagebox.showinfo("Splitted","PDF Saved in Desktop as splitted.pdf")
lbl7 = tk.Label(root7,image=photo7)
lbl7.place(x=0, y=0)
button7 = tk.Button(root7, text= 'Open PDF', command=open1, bg="#B8B8B8")
button7.place(width=300, height=50, x=150, y=450)
button8 = tk.Button(root7, text= 'Split PDF', command=split, bg="#B8B8B8")
button8.place(width=300, height=50, x=150, y=540)
root7.update()
root7.mainloop()
GUI不太好,但仍能正常工作。只有在选择PDF文件后才能创建页面范围微调框,然后立即获取其值。您正在创建页面范围为0到0的新文件;用户何时有机会输入其他内容?是的,这就是问题所在。每次将元素(列表)的值更改为空列表时,tkinter.mainloop()都会运行循环。这不应该发生。如果这不会发生,那么程序将成功运行。这就是为什么程序保存pdf时没有页面,因为要拆分的页面范围变为零。我将在修复此错误后更改用户界面。请看,这与事件驱动编程相关,意味着您必须有一个按钮或触发某种事件,这会将值添加到列表中,从现在起,你所做的是,你要求他们附加微调框的初始值,即0谢谢你提供的信息,我能够解决这个问题。你只在选择PDF文件后创建页面范围微调框,然后立即获得它们的值。您正在创建页面范围为0到0的新文件;用户何时有机会输入其他内容?是的,这就是问题所在。每次将元素(列表)的值更改为空列表时,tkinter.mainloop()都会运行循环。这不应该发生。如果这不会发生,那么程序将成功运行。这就是为什么程序保存pdf时没有页面,因为要拆分的页面范围变为零。我将在修复此错误后更改用户界面。请看,这与事件驱动编程相关,意味着您必须有一个按钮或触发某种事件,这会将值添加到列表中,从现在起,你所做的是,你让他们附加spinbox的初始值,即0谢谢你提供的信息,我能够解决这个问题