これが既存のGUI内で実行されている場合は、wait_window
を使用して、ウィンドウが破棄されるまでブロックするモーダルダイアログをToplevelで作成できます。そうでなければGUI以外のプログラムでポップアップウィンドウを使いたいなら、ルートウィンドウが破壊されたときに値を返す関数に自己完結型の小さなtkinterプログラムを作ることができます。
どちらの場合も、ウィンドウが破棄されるまで待ってから、ウィンドウ内の値をフェッチします。ウィンドウは破棄されているので、ウィンドウとともに破棄されないので、StringVar
を使用する必要があります。ここで
にはGUIがすでに実行されていないと仮定し例です:
import tkinter as tk
def gui_input(prompt):
root = tk.Tk()
# this will contain the entered string, and will
# still exist after the window is destroyed
var = tk.StringVar()
# create the GUI
label = tk.Label(root, text=prompt)
entry = tk.Entry(root, textvariable=var)
label.pack(side="left", padx=(20, 0), pady=20)
entry.pack(side="right", fill="x", padx=(0, 20), pady=20, expand=True)
# Let the user press the return key to destroy the gui
entry.bind("<Return>", lambda event: root.destroy())
# this will block until the window is destroyed
root.mainloop()
# after the window has been destroyed, we can't access
# the entry widget, but we _can_ access the associated
# variable
value = var.get()
return value
print("Welcome to TCP Socket")
address = gui_input("Insert server address:")
print("Connecting to " + address)
すでに実行されているGUIを使用している場合は、ポップアップウィンドウを作成するためにtk.Toplevel()
でtk.Tk()
を交換して、むしろ.wait_window()
を使用することができます.mainloop()
よりウィンドウが破棄されるのを待つ必要があります。
'raw_input'のどの機能が、エミュレートしたい' tk.Entry'ウィジェットから抜けていますか? – martineau
@martineau:私の推測では、OPは、ユーザが文字列を入力するまでブロックする呼び出し可能コードを必要としているということです。 –
正確に何をしたいのですが、get()を使うと、その項目が空であっても関数が実行されます。私は関数がユーザーによるキーボードのReturnキーを押すのを待つことを望んでいます – LoreSchaeffer