Tkinter文本框返回一个变量
问题描述:
这应该是非常非常简单的,但我如何获得以下基本代码来输出输入的变量,以便我可以将它传递给程序的其余部分。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模块返回吗?
答
这是一个范围问题!请注意,当您分配到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()
顺便提一句,'OutputText()'和'GetString()'不是**模块**,它们是**函数**。我认为通过关于Python的简短教程会很好。下面是我喜欢的一个:[如何像计算机科学家一样思考](http://openbookproject.net/thinkcs/python/english2e/)。 – voithos 2012-02-03 07:27:40
这不是如何设计的(或任何基于事件循环的工具包)。大多数情况下,启动主循环的调用是程序中最后一行代码。启动循环非常不寻常,停止它并继续。 – 2012-02-03 12:16:08
同意Bryan,将OutputText()或OutputText() – 2012-02-03 18:19:23