如果這是在現有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.Tk()
與tk.Toplevel()
創建一個彈出窗口,然後用.wait_window()
而比.mainloop()
等待窗戶被銷燬。
究竟是什麼'raw_input'的功能從您希望模擬的'tk.Entry'小部件中丟失? – martineau
@martineau:我的猜測是OP想要一個可調用的塊,直到用戶輸入一個字符串。 –
正是我想要的,如果我使用get()函數繼續,即使條目是空的。我希望函數等待用戶在鍵盤上按回車 – LoreSchaeffer