我想要在那裏,點擊按鈕後,用戶被要求提供它的名字,之後程序繼續執行程序空。我堅持讓彈出式窗口返回已經在彈出窗口中輸入的文本字符串。起初我認爲這是我的代碼,但我決定製作第二個程序,它只是詢問名稱,打印它,打印它的長度和類型。在第二個方案中,一切都按照它應該的那樣工作。我很難弄清楚爲什麼它不在第一個(較大的)程序中。我已經閱讀(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