ボタンをクリックした後、ユーザが名前を尋ねられた後にプログラムを続けるプログラムを作りたいと思います。私はポップアップにポップアップで入力されたテキスト文字列を返すようにしています。最初は私のコードだと思っていましたが、名前を尋ねて印刷し、長さとタイプを印刷する第2のプログラムを作ることにしました。その2番目のプログラムでは、すべてが正常に動作します。最初の(より大きい)プログラムではなぜそうでないのかを理解するのは非常に苦労しています。私はすでに(Why is Tkinter Entry's get function returning nothing?)を読んでいて、私の機能が私の.mainloop
の後に現れても、それはまだ動作しません。私が絶対に何も知っていることではないクラスを使用して提案する同じスレッドで。可能であれば、私の大きなプログラムで何が欠けているのか誰かが指摘できますか?Tkinterのエントリウィジェットは大きなプログラムでは空のままです(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
ところで:メインウィンドウだけを作るのに 'Tk()'を使います。もしあなたがポップアップ/ダイアログウィンドウを必要とするなら、 'Toplevel()'を使用してください。 – furas
BTW:おそらくあなたの大きなプログラムは間違ったインデントを持っていますが、プログラムは 'mainloop()'(そして 'Tk – furas