2016-02-26 110 views
2

我正在嘗試使用Tkinter的Entry小部件。我無法讓它做一些非常基本的事情:返回輸入的值。
有沒有人有任何想法,爲什麼這樣一個簡單的腳本不會返回任何東西?我嘗試過很多種組合,並看到不同的想法。
這個腳本運行,但不打印錄入:Python Tkinter條目獲取()

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

您的第一個問題是entry = E1.get()中的get的調用在您的程序啓動之前就會發生,因此明確entry將指向一些空字符串。

您最終的第二個問題是無論如何只有在主循環結束後纔打印文本,即關閉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()