2016-03-04 221 views
-1

当函数c()被调用时,StringVar.get()方法返回一个空值。但是,当我只调用new_db()函数时,它工作得很好。 我真的不明白这个问题。有人可以向我解释吗?Tkinter中的Python StringVar()。get()返回空白值

#modules 
import os 
from Tkinter import * 

chance=3 
def cr(): 
    print data.get() 

#new_db 

def new_db(): 
    global data 
    m.destroy() 
    new=Tk() 
    data=StringVar() 


    Entry(new,font='BRITANIC 16',textvariable=data).grid(column=1,row=2) 
    Button(new,text='Create New Database',command=cr).place(x=175,y=75) 
    new.geometry('500x100+400+250') 
    new.mainloop() 

def c(): 
    global m 
    m=Tk() 
    Button(m,text='erferf',command=new_db).pack() 
    m.mainloop() 
c() 
+0

在Python 3中,您的代码(使用'Tkinter'重命名并且'print'作为函数调用)适用于我。 – Blckknght

回答

1

看这个答案When do I need to call mainloop in a Tkinter application?。它告诉主循环()必须只被调用一次。

另外,当点击按钮执行new_db()时,Tk对象m应该仍然存在。

对于你试图完成的任务,你应该只创建一次Tk(),并且只调用一次mainloop()。然后你应该放置代码来隐藏/显示相应的小部件。看看In Tkinter is there any way to make a widget not visible?了解如何显示/隐藏小部件。

+0

谢谢,它只在调用一次mainloop时有效 – Ruth