2016-02-26 2 views
2

Я пытаюсь использовать виджет Entry Tkinter. Я не могу заставить его сделать что-то очень основное: верните введенное значение.
Кто-нибудь есть идеи, почему такой простой скрипт ничего не вернет? Я пробовал множество комбинаций и смотрел на разные идеи.
Этот скрипт работает, но не печатает запись:Python Tkinter Entry get()

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

Кажется так просто.

Редактировать: Если кто-то еще сталкивается с этой проблемой и не понимает, вот что в итоге работает для меня. Я добавил кнопку в окно ввода. Команда кнопки закрывает окно и выполняет функцию 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() 

И это вернуло желаемое значение.

+1

'получить()' вызывается перед любой текст вводится. Поэтому 'entry' - пустая строка (измените' entry' на 'repr (entry)' в последней строке, и вы увидите это). Если вы хотите вызвать 'get()', когда вводится какой-либо текст (вы, вероятно, это делаете), вам нужно связать 'get()' с событием. – gil

+0

И 'print' не произойдет, потому что перед ним есть бесконечный цикл (' root.mainloop() '). – TigerhawkT3

ответ

2

Ваша первая проблема заключается в том, что вызов get в entry = E1.get() происходит еще до запуска вашей программы, поэтому ясно, что entry укажет на какую-то пустую строку.

Ваша вторая проблема заключается в том, что текст будет напечатан только после завершения mainloop, т. Е. Вы закрываете приложение tkinter.

Если вы хотите распечатать содержимое своего виджета Entry во время работы вашей программы, вам необходимо запланировать обратный вызов. Например, вы можете слушать нажатие клавиши <Return> следующим

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

Спасибо, это помогло мне разобраться в проблеме. Похоже на catch-22, что вы не можете поместить e.get() в программу, потому что строка пуста, а ее внешняя оболочка нарушает сценарий, потому что программа была уничтожена. Понимая это, я добавил команду, включающую e.get(), чтобы закрыть окно ввода. Я отредактирую свой вопрос с полным рабочим кодом. – 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()