我最近编写了一个命令行脚本,它从pdf中获取一系列页面并从中生成一个新的pdf。我现在正试图将该剧本变成一个小gui程序。
但是在单击按钮时,我无法运行切片方法代码。截至目前正在运行程序调出gui,但是当我单击按钮时,我在shell中收到此错误消息:
Traceback (most recent call last):
File "pdfSliceGui.py", line 54, in slice
old = oldPDF.get_text()
NameError: global name 'oldPDF' is not defined
slice()方法似乎无法读取条目中的内容。并且它似乎是一个范围问题,slice()方法无法识别该条目。我可能还有一个问题是将一些条目转换为Ints,但我的主要关注点是使用slice()方法来处理Entry数据。
以下是我写的代码的相关部分:
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="PDF Slicer")
self.set_size_request(320, 320)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
self.add(vbox)
label1 = Gtk.Label()
label1.set_text("PDF to extract from")
vbox.pack_start(label1, True, True, 0)
oldPDF = Gtk.Entry()
vbox.pack_start(oldPDF, True, True, 0)
label2 = Gtk.Label()
label2.set_text("PDF to extract to")
vbox.pack_start(label2, True, True, 0)
newPDF = Gtk.Entry()
vbox.pack_start(newPDF, True, True, 0)
label3 = Gtk.Label()
label3.set_text("Start page")
vbox.pack_start(label3, True, True, 0)
start = Gtk.Entry()
vbox.pack_start(start, True, True, 0)
label4 = Gtk.Label()
label4.set_text("End page")
vbox.pack_start(label4, True, True, 0)
end = Gtk.Entry()
vbox.pack_start(end, True, True, 0)
button = Gtk.Button.new_with_label("Slice")
button.connect("clicked", self.slice)
vbox.pack_start(button, True, True, 0)
def slice(self, button):
old = oldPDF.get_text()
new = newPDF.get_text()
s = int(start.get_text()) - 1
e = int(end.get_text())
pdfFileObj = open(old, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pdfWriter = PyPDF2.PdfFileWriter()
for page in range (s, e):
pageObj = pdfReader.getPage(page)
pdfWriter.addPage(pageObj)
pdfOutputFile = open(new, 'wb')
pdfWriter.write(pdfOutputFile)
pdfOutputFile.close()
pdfFileObj.close()
答案 0 :(得分:0)
您在__init__()
中创建的变量(例如oldPDF
)是__init__()
的本地变量,而不是该类的属性。要通过其他方法访问它们,请在其前面添加self.
,self.oldPDF
。然后,您将能够在类的其他方法中使用它们,例如信号处理程序。