您的代码流如下所示:
- 主要作用域调用
getText
。 getText
创建一个takeInput
对象a
。- 的
takeInput
对象初始化自身,创建标签及按钮等 getText
返回a.getString()
,返回self.string
,其仍为默认值,即空字符串。- 主范围显示
var
,该值为空。
到目前为止,所有这些都发生在几纳秒的时间范围内。用户甚至还没有看到窗口。
然后
root.mainloop(),主作用域调用,这最终为用户提供了与窗口进行交互的机会。但是为时已晚。
var已被打印。
如果您不希望
getText在用户提交文本之前不返回,则
mainloop必须在内
getText而不是之后进行。
from Tkinter import *class takeInput(object): def __init__(self,requestMessage): self.root = Tk() self.string = '' self.frame = frame(self.root) self.frame.pack() self.acceptInput(requestMessage) def acceptInput(self,requestMessage): r = self.frame k = Label(r,text=requestMessage) k.pack(side='left') self.e = Entry(r,text='Name') self.e.pack(side='left') self.e.focus_set() b = Button(r,text='okay',command=self.gettext) b.pack(side='right') def gettext(self): self.string = self.e.get() self.root.destroy() def getString(self): return self.string def waitForInput(self): self.root.mainloop()def getText(requestMessage): msgBox = takeInput(requestMessage) #loop until the user makes a decision and the window is destroyed msgBox.waitForInput() return msgBox.getString()var = getText('enter your name')print "Var:", var


