Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python tkinter mainloop中定义一个列表而不更改它';s值_Python_Pdf_Tkinter_Pypdf2 - Fatal编程技术网

如何在python tkinter mainloop中定义一个列表而不更改它';s值

如何在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

我试图用python程序来分割PDF文件。因此,我必须定义一个列表来附加元素,但当循环再次迭代时,列表的值将更改为空白列表。因此,该程序将生成一个pdf,其中没有任何内容。这是我的密码

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谢谢你提供的信息,我能够解决这个问题