2012-02-03 115 views
0

這應該是非常非常簡單的,但我如何獲得以下基本代碼來輸出輸入的變量,以便我可以將它傳遞給程序的其餘部分。Tkinter文本框返回一個變量

from Tkinter import * 
root = Tk() 

InputStrings = StringVar() 
Entry(root, textvariable=InputStrings).pack() 

def GetString(): 
    print InputStrings.get() 
    Button(root, text='Print', command=OutputText).pack() 
    root.mainloop() 

def OutputText(): 
    OutString=InputStrings.get() 
    print OutString 
    root.withdraw() 
    root.quit() 

GetString() 
print OutString 

當我將OutString添加到def時,它會給出其他錯誤。我是否真的需要OutputText模塊 - 它不能從GetString模塊返回嗎?

+0

順便提一句,'OutputText()'和'GetString()'不是**模塊**,它們是**函數**。我認爲通過關於Python的簡短教程會很好。下面是我喜歡的一個:[如何像計算機科學家一樣思考](http://openbookproject.net/thinkcs/python/english2e/)。 – voithos 2012-02-03 07:27:40

+1

這不是如何設計的(或任何基於事件循環的工具包)。大多數情況下,啓動主循環的調用是程序中最後一行代碼。啓動循環非常不尋常,停止它並繼續。 – 2012-02-03 12:16:08

+0

同意Bryan,將OutputText()或OutputText() – 2012-02-03 18:19:23

回答

2

這是一個範圍問題!請注意,當您分配到OutString時,您正在使用該功能。那麼,Python認爲你需要一個新的變量在該函數中。但之後,在模塊範圍內,在GetString()的呼叫結束後,您嘗試打印OutString。驚喜!它不存在。

這是因爲您忘了將其添加到全局範圍。要確保將分配的變量分配給全局而非本地範圍,請使用global statement。像這樣:

def OutputText(): 
    # Declare that OutString will be global 
    global OutString 
    OutString = InputStrings.get() 
    ... 

GetString() 
print OutString 
# It prints! Twice, actually, because you also printed it from OutputText()