2016-12-31 2 views
-1

(Long Frage)Convert Tkinter Textbox Einstieg in Python Variable

Ich versuche, ein Stück Code zu schreiben, die einen Dateipfad von dem Benutzer unter Verwendung eines tkinter Textbox nehmen wird, wenn eine Taste gedrückt wird. Es würde dann diesen Textfeld-Eintrag in einen String umwandeln, der an eine normale Python-Variable angehängt ist, so dass ich diese Variable später in einer Funktion verwenden kann, um diese Datei zu verwenden. Der Code, den ich angehängt habe, kann dazu führen, dass das Label den Textfeldeintrag kopiert, aber ich kann diese Variable oder myvar nicht in "normalem Python-Code" verwenden. Außerdem habe ich im Code versucht, myvar.get() über die Funktion mywarWritten zurückzusenden, aber ich kann keine Variable wie mywarWritten (Parameter) setzen, da dies von dem Textfeldeintrag abhängt, der nicht vor dem Drücken der Schaltfläche passiert. Wenn die Taste gedrückt wird, druckt die Druckfunktion die Anweisung, aber sie kehrt nicht zurück, wenn die Funktion gleich gesetzt ist.

(kurz)

Ich mag einen Wert nehmen, oder String, von dem Benutzer eines Tkinter Textfeld verwenden, und verwenden Sie den Eintrag als ein normales Python-Variable. Vorzugsweise würde der Wert in der Textbox nur genommen, wenn eine Taste gedrückt wird.

from Tkinter import * 
import Tkinter as tk 

root = Tk() 
root.title("MyApp") 

myvar = StringVar() 

def mywarWritten(*args): 
    print "mywarWritten",myvar.get() 
    please = myvar.get() 
    return please 

#trying to make the function return the textbox entry but fails 
attempt = mywarWritten() 
print "plz %s" % (attempt) 

#trying to just set it equal too but also fails 
python_variable = myvar.get() 
label = Label(root, textvariable=myvar) 
label.pack() 

text_entry = tk.Entry(root, textvariable=myvar) 
button1 = tk.Button(root, text="Back to Home", command=lambda: mywarWritten()) 
button1.pack() 
text_entry.pack() 

#trying attempt and pythonvariable in "normal python code" 
print attempt 
print pythonvariable 
root.mainloop() 

Vielen Dank für die Hilfe im Voraus.

+0

Funktion, die Taste zugewiesen ist, kann keinen Wert zurückgeben, da niemand diese Variable empfangen kann. Die Zeilen 'versuch = ...' und 'python_variable = ...' sind nutzlos, weil sie zu Beginn des Skripts ausgeführt werden, wenn 'Entry' noch immer empy ist. Sie müssen lernen, dass nur Code innerhalb von Funktionen, die 'Button' oder anderen Widgets zugewiesen sind, sinnvoll ist. Alles außerhalb von Funktionen wird nur einmal ausgeführt - beim Start des Skripts - und wird nur zum Erstellen einer GUI verwendet. – furas

+0

Danke das macht sehr viel Sinn. Also, anstatt zu versuchen, den Texteintrag herauszubringen, sollte ich meine Funktion (nicht gezeigt) in Bezug auf die Schaltfläche richtig einbringen? – HarleyH

+0

Ja, Sie müssen alles innerhalb von Funktionen tun. – furas

Antwort

1

Sie scheinen ein paar Missverständnisse über Umfang, Importe, Referenzen und Funktionen zu haben. myvar ist bereits zugänglich, und alles, was Sie tun müssen, um darauf zuzugreifen, ist get() es. Importieren Sie das gleiche Modul nicht mehrmals und versuchen Sie, from x import * zu vermeiden. Die Rückgabe eines Wertes an eine Schaltfläche ist nicht sinnvoll und hat keine Auswirkungen. Jede Codezeile, die nicht in einer Funktion oder Klasse enthalten ist, wird sofort ausgeführt, so dass attempt = mywarWritten() und alle anderen Male, die Sie außerhalb einer Funktion ausgeführt haben, den Wert StringVar erhalten, sobald das Programm ausgeführt wird, bevor etwas darin ist. Und lambda: func() ist nur func.

import Tkinter as tk 

root = tk.Tk() 
root.title("MyApp") 

myvar = tk.StringVar() 

def mywarWritten(*args): 
    print "mywarWritten", myvar.get() 

label = tk.Label(root, textvariable=myvar) 
label.pack() 

text_entry = tk.Entry(root, textvariable=myvar) 
button1 = tk.Button(root, text="Back to Home", command=mywarWritten) 
button1.pack() 
text_entry.pack() 

root.mainloop() 

Jedes Mal, wenn Sie den Inhalt dieses Eintrags-Widget zugreifen wollen, tun nur myvar.get() und dort wird es sein.

Sie haben auch mywarWritten statt my_var_written mit einem v für var.

Insgesamt kann ich sehr empfehlen, lesen Sie die official Python tutorial (und Python 3 verwenden, weil es besser als Python 2 ist).

+0

Ich entschuldige mich für die einfachen Fehler. Ich hatte so viel Zeug probiert, dass es ein Durcheinander wurde, aber ich wollte es nicht löschen, sonst hätte ich vergessen, was ich tat. Ich habe versucht, es aufzuschnappen, aber einige Dinge übersehen. – HarleyH