PyGObject:链接到按下按钮的方法无法识别输入字段

时间:2016-10-05 19:14:32

标签: python gtk pygobject

我最近编写了一个命令行脚本,它从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()

1 个答案:

答案 0 :(得分:0)

您在__init__()中创建的变量(例如oldPDF)是__init__()的本地变量,而不是该类的属性。要通过其他方法访问它们,请在其前面添加self.self.oldPDF。然后,您将能够在类的其他方法中使用它们,例如信号处理程序。