2016-02-26 2 views
2

J'essaie d'utiliser le widget Entry de Tkinter. Je n'arrive pas à faire quelque chose de très basique: retourner la valeur entrée.
Quelqu'un a-t-il une idée de la raison pour laquelle un script aussi simple ne retournerait rien? J'ai essayé des tonnes de combinaisons et j'ai regardé différentes idées.
Ce script exécute mais n'imprime pas l'entrée:Python Tkinter Entrée get()

from Tkinter import * 
root = Tk() 
E1 = Entry(root) 
E1.pack() 
entry = E1.get() 
root.mainloop() 
print "Entered text:", entry 

semble si simple.

Éditer: Si quelqu'un d'autre rencontre ce problème et ne comprend pas, voici ce qui a fini par travailler pour moi. J'ai ajouté un bouton à la fenêtre d'entrée. La commande du bouton ferme la fenêtre et fait la fonction get():

from Tkinter import * 
def close_window(): 
    global entry 
    entry = E.get() 
    root.destroy() 

root = Tk() 
E = tk.Entry(root) 
E.pack(anchor = CENTER) 
B = Button(root, text = "OK", command = close_window) 
B.pack(anchor = S) 
root.mainloop() 

Et cela a renvoyé la valeur désirée.

+1

'get()' est appelée avant tout texte est saisi. Donc 'entry' est une chaîne vide (change' entry' en 'repr (entrée)' dans la dernière ligne et vous verrez ça). Si vous voulez appeler 'get()' quand un texte est entré (vous le faites probablement), vous devez lier 'get()' à un événement. – gil

+0

Et le 'print' n'arrivera pas parce que vous avez une boucle infinie avant (le' root.mainloop() '). – TigerhawkT3

Répondre

2

Votre premier problème est que l'appel à get dans entry = E1.get() se produit même avant que votre programme commence, donc clairement entry pointera vers une chaîne vide.

Votre second problème éventuel est que le texte ne sera imprimé qu'après la fin de la boucle principale, c'est-à-dire que vous fermez l'application tkinter.

Si vous souhaitez imprimer le contenu de votre widget Entry lorsque votre programme est en cours d'exécution, vous devez planifier un rappel. Par exemple, vous pouvez écouter la pression de la touche <Return> comme suit

import Tkinter as tk 


def on_change(e): 
    print e.widget.get() 

root = tk.Tk() 

e = tk.Entry(root) 
e.pack()  
# Calling on_change when you press the return key 
e.bind("<Return>", on_change) 

root.mainloop() 
+0

Merci, cela m'a aidé à comprendre le problème. Il semble comme un catch-22 que vous ne pouvez pas mettre e.get() dans le programme parce que la chaîne est vide, et le mettre à l'extérieur brise le script parce que le programme a été détruit. En réalisant cela, j'ai ajouté une commande incluant e.get() pour fermer la fenêtre d'entrée. Je vais modifier ma question avec le code de travail complet. – Bird

1
from tkinter import * 
import tkinter as tk 
root =tk.Tk() 
mystring =tk.StringVar(root) 
def getvalue(): 
    print(mystring.get()) 
e1 = Entry(root,textvariable = mystring,width=100,fg="blue",bd=3,selectbackground='violet').pack() 
button1 = tk.Button(root, 
       text='Submit', 
       fg='White', 
       bg= 'dark green',height = 1, width = 10,command=getvalue).pack() 

root.mainloop()