2012-02-03 114 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()