PyGObject:链接到按钮按下的方法无法识别输入字段中的数据
PyGObject: Method linked to button press isn't recognizing data in the entry fields
我最近写了一个命令行脚本,它从 pdf 中获取一系列页面并从中制作一个新的 pdf。我现在正试图将该脚本变成一个小的 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() 方法处理条目数据。
下面是我写的代码的相关部分:
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()
您在 __init__()
中创建的变量,例如 oldPDF
,是 __init__()
的本地变量,而不是 class 的属性。要使它们可以通过其他方法访问,请在它们前面加上 self.
,因此 self.oldPDF
。然后您就可以在 class 的其他方法中使用它们,例如信号处理程序。
我最近写了一个命令行脚本,它从 pdf 中获取一系列页面并从中制作一个新的 pdf。我现在正试图将该脚本变成一个小的 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() 方法处理条目数据。
下面是我写的代码的相关部分:
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()
您在 __init__()
中创建的变量,例如 oldPDF
,是 __init__()
的本地变量,而不是 class 的属性。要使它们可以通过其他方法访问,请在它们前面加上 self.
,因此 self.oldPDF
。然后您就可以在 class 的其他方法中使用它们,例如信号处理程序。