2017-07-07 5 views
0

Ich möchte die Daten im Eingabefeld aus dem zweiten Fenster erfassen, das unter Ausgabe definiert ist. Wenn ich auf submit klicke, bekomme ich die folgende Nachricht: AttributeError: 'NoneType-Objekt hat kein Attribut' get '.Tkinter Eintrag Feld Capture AttributeError:

Ich denke, das sollte eine einfache Lösung sein und verstehe nicht, warum kann ich die Daten nicht aus dem Eingabefeld erfassen?

from tkinter import * 
import xlsxwriter 

class MyFirstGUI: 
    def __init__ (self, master): 
     master.title("Main") 
     master.geometry("400x400+230+160") 

     button1 = Button(master, text="1", command= self.output).grid(row=0, column=0) 


    def output(self): 

     cw1= Toplevel(root) 
     cw1.title("cw1") 
     cw1.geometry("400x300+160+160") 

     self.b2 = Button(cw1, text="Submit",command = self.write_to_xlsx).grid(row=0, column=2) 
     self.l2 = Label(cw1, text="New Specimen").grid(row=0, column=0) 

     self.e2 = Entry(cw1).grid(row=0, column=1) 


    def write_to_xlsx(self): 

     workbook = xlsxwriter.Workbook('tkintertest19.xlsx') 
     worksheet = workbook.add_worksheet() 
     worksheet.write_string('C1', self.e2.get()) 
     workbook.close() 


root = Tk() 
my_gui = MyFirstGUI(root) 
root.mainloop() 

Antwort

1

Was Sie tun müssen, ist spaltete die Linie

self.l2 = Label(cw1, text="New Specimen").grid(row=0, column=0) 

in

self.l2 = Label(cw1, text = "New Specimen") 
self.l2.grid(row=0, column=0) 

Nicht intuitiv wie dies erscheinen mag, die grid/pack/place Funktionen None zurückkehren, so Der ganze Shebang (Label().grid()) gibt None zurück. Die Lösung besteht darin, sie einfach aufzuteilen, damit Sie das richtige Ergebnis erhalten, wenn Sie .get() verwenden.

+0

Der Grund, warum @heather die Zeile aufteilt, liegt darin, dass das Raster (...) am Ende des Label-Befehls tatsächlich None zurückgibt, während der Label (...) -Befehl das Label-Objekt zurückgibt - was Sie wollen . –

+0

@RonNorris, bereits bearbeitet, um das hinzuzufügen (vor Ihrem Kommentar); Entschuldigung dafür, dass ich das nicht auf Anhieb gemacht habe. – heather

+0

@ heather Danke !! Einfache Lösung – applestooragnes

Verwandte Themen