2016-10-05 60 views
0

我最近編寫了一個命令行腳本,該命令行腳本從pdf中取出一系列頁面,並從中創建一個新的pdf。我現在正試圖將這個腳本變成一個小型的gui程序。PyGObject:鏈接到按鈕按鈕的方法無法識別輸入字段中的數據

但是,當單擊按鈕時,我得到的slice方法代碼運行時出現問題。截至目前運行的程序彈出貴,但是當我按一下按鈕我得到的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

我不知道Python足以知道這是否正確,但我很確定你的小部件變量是'__init__'本地的,因此當它返回時就會丟失。 – andlabs

+0

@andlabs這是正確的,他們需要更改爲'self.oldPDF'等我不會發布它作爲答案,所以你可以賺取點:-) – ptomato

回答

0

您在__init__()創建的變量,如oldPDF,是本地類的__init__()而不是性能。要使它們可以通過其他方法訪問,請以self.爲前綴,因此self.oldPDF。然後你可以在類的其他方法中使用它們,例如信號處理程序。