我想要在那里,点击按钮后,用户被要求提供它的名字,之后程序继续执行程序空。我坚持让弹出式窗口返回已经在弹出窗口中输入的文本字符串。起初我认为这是我的代码,但我决定制作第二个程序,它只是询问名称,打印它,打印它的长度和类型。在第二个方案中,一切都按照它应该的那样工作。我很难弄清楚为什么它不在第一个(较大的)程序中。我已经阅读(Why is Tkinter Entry's get function returning nothing?)和,即使我.mainloop
发生后我.get()
功能,但它仍然无法正常工作;在同一个线程中,他们建议使用类,这是我完全不知道的。如果可能的话,任何人都可以指出我在我的大型项目中缺少的东西?Tkinter的Entry组件保持在较大的程序(Python的2)
大项目
from Tkinter import *
root = Tk()
root.title("Ask-name-SUB")
def getname(usertype):
getname = Tk()
getname.title("Get name popup")
def abort():
getname.destroy()
name = StringVar()
c = LabelFrame(getname, text = "Your name:")
c.pack()
d = Entry(getname, textvariable=name)
d.pack(side="right")
d.bind("<Return>", lambda event: getname.destroy())
e = Button(getname, text = "Cancel", command=lambda: abort())
e.pack()
getname.mainloop()
name = (name.get())
print "Print name, its length, its type"
print name
print len(name)
print type(name)
top = Frame(root)
top.pack(side="top")
bottom = Frame(root)
bottom.pack(side="bottom")
def killit():
root.destroy()
cancel = Button (bottom, text = "Cancel", command=lambda: killit())
cancel.pack()
askname = Button (top, text = "Enter your name", command=lambda: getname("testuser"))
askname.pack()
root.mainloop()
小程序
from Tkinter import *
def getname(usertype):
getname = Tk()
getname.title("Get name popup")
def abort():
getname.destroy()
name = StringVar()
c = LabelFrame(getname, text = "Your name:")
c.pack()
d = Entry(getname, textvariable=name)
d.pack(side="right")
d.bind("<Return>", lambda event: getname.destroy())
e = Button(getname, text = "Cancel", command=lambda: abort())
e.pack()
getname.mainloop()
name = (name.get())
print "Print name, its length, its type"
print name
print len(name)
print type(name)
getname("testuser")
较大的程序不工作对我来说 - 你定义函数'getname',你使用它的小部件,因为你认为你有'的getName = TK()',但它是不对。 – furas
BTW:我们使用'Tk()'来创建唯一的主窗口。如果你需要弹出/对话框窗口然后使用'Toplevel()' – furas
BTW:可能你的大程序有错误的缩进 - 但我认为问题是因为程序应该只有一个'mainloop()'(并且只有一个'Tk()'作为主窗口) – furas