フォーラムでは最近、@Clueless_captainによる質問が投稿されました。 @furasによって答えられました。私はstackoverflowに新しいので、私はその会話にコメントすることはできません。これはその会話のURLです(Tkinter Entry widget stays empty in larger programs (Python 2))。 furasによってポストされたコードは私がやろうとしているものではありませんが、自分でできないのは、EntryWidgetで与えられたInputを再利用する方法を見つけることだけです。私は、furasによって書かれたコードを修正しました。私の目標は、GUIが終了する前に入力が印刷されるということでした。そのためにReturnキーを新しいFunctionにバインドしました。このFunctionは、この新しいFunctionでTextstringを取得してさらに処理することになっていました。これは、ボタンをクリックして2回目の名前を取得したときにのみ行います。このコードの順序はオフですか?問題は10行目の文字列 'e.bind
'と密接に関連していますが、私は問題を見つけることができません。TKinter:TopLevel()のEntry-Widgetからの入力を再利用する
よろしく、G_Lehmann
----------変更したコード:
from Tkinter import *
def get_input(text, variable):
win = Toplevel()
win.title("Get value")
f = LabelFrame(win, text=text)
f.pack()
e = Entry(win, textvariable=variable)
e.bind("<Return>", do_more(text, variable, e))
e.pack(side="right")
#I tried e.bind here, but This had no Effect.
b = Button(win, text = "Cancel", command=win.destroy)
b.pack()
#do_more is the new Function I want to use to process the Variable 'data' further.
def do_more(text, variable, e):
data = e.get()
print data
print len(data)
print type(data)
def get_value(text, variable):
get_input(text, variable)
# --- main --
root = Tk()
root.title("Ask-name-SUB")
# global variables
var_name = StringVar()
var_address = StringVar()
b = Button(root, text="Enter your name", command=lambda: get_value("Your name:", var_name))
b.pack()
b = Button(root, text="Enter your address", command=lambda: get_value("Your address:", var_address))
b.pack()
b = Button(root, text="Cancel", command=root.destroy)
b.pack()
root.mainloop()
# --- after -- (My Edit: I disabled this as I want to bind the Variables before my GUI gets terminated)
"""
name = var_name.get()
print "Print name, its length, its type"
print name, len(name), type(name)
address = var_address.get()
print "Print address, its length, its type"
print address, len(address), type(address)
"""
あなたの質問は少し不明です。あなたが解決しようとしている本当の問題は何ですか?ユーザーに文字列の入力を要求する関数を呼び出すことができ、その関数を構成可能にしたい(つまり、 "Your name"または "Your address"を渡す)必要がありますか?また、あなたの実際の目的は情報を印刷することだけですか、または説明の目的のために 'mainloop'の後の印刷ステートメントですか?ほとんどのGUIは 'mainloop'の後にコードを持つべきではありません。 –
'bind'(' command = 'と似ています)は関数名を必要とします - それは'() 'と引数なしであることを意味します。あなたは 'lambda'を使って引数' e.bind( ""、lambda:do_more(text、variable、e))を割り当てできます。 –
furas
BTW:2番目のボタンを作成できます。 '' OK '' - このボタンに関数を割り当て、ウィンドウを閉じる前に何かをします。 – furas