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 的其他方法中使用它们,例如信号处理程序。