2017-07-09 10 views
1

Ich muss von einem Start-Eingangswert zu einem Endwert mit tkinter Eingabefeldern zählen, aber die 2 Ausgabedateien sind leer, außer Klammern und ich weiß, dass die CSV-Ausgaben funktionieren, es ist nur die Benutzereingabe, die das ist Problem. Danke für jede Hilfe.Tkinter Eingabefelder

Es gibt den aktuellen Code.

import csv 
from tkinter import * 

# Variables/Arrays 
oddArray = [] 
evenArray = [] 


def main(): 
    for i in range(oute1, oute2): 
     x = i 
     # Odds 
     if(x % 2 == 1): 
      oddArray.append(x) 
     # Evens 
     elif(x % 2 == 0): 
      evenArray.append(x) 

    with open("odd_labels", "w") as outputFile1: 
     writer1 = csv.writer(outputFile1) 
     writer1.writerow([oddArray]) 

    with open("even_labels", "w") as outputFile2: 
     writer2 = csv.writer(outputFile2) 
     writer2.writerow([evenArray]) 


# gui framework 
myGui = Tk() 
# myGui.geometry('225x50') 
# myGui.title("Label Creator") 

Label(myGui, text="Starting value: ").grid(row=0) 
Label(myGui, text="Ending value: ").grid(row=1) 

a = IntVar() 
b = IntVar() 

e1 = Entry(myGui, textvariable=a).grid(row=0, column=1) 
e2 = Entry(myGui, textvariable=b).grid(row=1, column=1) 

oute1 = a.get() 
oute2 = b.get() 

Button(myGui, text="Start", command=main).grid(row=3) 

myGui.mainloop() 

Antwort

0

Das Problem ist, wie Sie Ihre Eingabefelder erstellen. Wenn Sie den Grid-Manager am Ende einer Widget-Erstellung verwenden, können Sie .get() nicht darauf verwenden, da der Grid-Manager None zurückgibt. Um dies zu vermeiden, müssen Sie zuerst Ihr Widget erstellen und dann definieren, wo es in einer separaten Zeile steht.

Wechsel:

e1 = Entry(myGui, textvariable=a).grid(row=0, column=1) 
e2 = Entry(myGui, textvariable=b).grid(row=1, column=1) 

zu:

e1 = Entry(myGui, textvariable=a) 
e1.grid(row=0, column=1) 
e2 = Entry(myGui, textvariable=b) 
e2.grid(row=1, column=1) 

I notived Ihre oute1 und oute2 sind beide nur am Anfang des Programms erstellt. Sie müssen sie in eine Funktion verschieben und es sollte in Ihrer main Funktion gut funktionieren.

Try this:

import csv 
from tkinter import * 


myGui = Tk() 

oddArray = [] 
evenArray = [] 

Label(myGui, text="Starting value: ").grid(row=0) 
Label(myGui, text="Ending value: ").grid(row=1) 

a = IntVar() 
b = IntVar() 

e1 = Entry(myGui, textvariable=a) 
e1.grid(row=0, column=1) 
e2 = Entry(myGui, textvariable=b) 
e2.grid(row=1, column=1) 

def main(): 
    oute1 = a.get() 
    oute2 = b.get() 
    for i in range(oute1, oute2): 
     x = i 
     # Odds 
     if(x % 2 == 1): 
      oddArray.append(x) 
     # Evens 
     elif(x % 2 == 0): 
      evenArray.append(x) 

    with open("odd_labels", "w") as outputFile1: 
     writer1 = csv.writer(outputFile1) 
     writer1.writerow([oddArray]) 

    with open("even_labels", "w") as outputFile2: 
     writer2 = csv.writer(outputFile2) 
     writer2.writerow([evenArray]) 


Button(myGui, text="Start", command=main).grid(row=3) 

myGui.mainloop() 
+0

Danke für die Hilfe, aber dass es nicht beheben und die Dateien werden beide nur noch Klammern zurück. –

+0

Das liegt daran, dass deine oute1 und oute2 am Anfang deines Programms erstellt wurden und niemals geändert werden. Sie müssen sie in eine Funktion verschieben, die bei einem Ereignis wie einem Knopfklick oder etwas aufgerufen wird. –

+0

@JoeAckerson: Ich habe meine Antwort mit einigen weiteren Informationen aktualisiert. –