Entry в Toplevel - как взять значение

При нажатии на кнопку запускается функция, которая запускает окно TopLevel. На нем есть Entry и кнопка. При нажатии на кнопку, функция должна будет возвращать текст из entry. Пробовал код:

def inputBox(win):
    dop = tk.Toplevel(win)
    dop.geometry('200x60')    
    label = tk.Label(dop, text='Введите тираж')
    label.pack()
    inpt = tk.Entry(dop)
    inpt.pack()
    Button = tk.Button(dop, text='ок', command = return inpt.get())
    Button.pack()
res = inputBox(win)
#
#
#
#Описание основной формы

Однако он не работает(Просит заменить command = на command ==, что как то не логично). Как это правильно сделать


Ответы (2 шт):

Автор решения: Serg Bocharov

Попробуйте так:

def inputBox(win):
    dop = tk.Toplevel(win)
    dop.geometry('200x60')    
    label = tk.Label(dop, text='Введите тираж')
    label.pack()
    inpt = tk.Entry(dop)
    inpt.pack()
    inpt.focus_set()
    def callback():
        return inpt.get()
    Button = tk.Button(dop, text='ок', command = callback)
    Button.pack()
res = inputBox(win)
→ Ссылка
Автор решения: insolor

В обработчике нажатия на кнопку "ок" нужно записать введенную строку в переменную функции inputBox и закрыть дочернее окно, в самой функции inputBox дождаться закрытия дочернего окна (метод wait_window), и вернуть значение этой переменной:

import tkinter as tk


def inputBox(win):
    dop = tk.Toplevel(win)
    # dop.geometry('200x60')    
    label = tk.Label(dop, text='Введите тираж')
    label.pack()
    inpt = tk.Entry(dop)
    inpt.pack()

    result = None  # Значение по-умолчанию (будет возвращено, например, если закрыть дочернее окно через крестик)
    def callback():
        nonlocal result  # nonlocal говорит, что переменная result является переменной внешней функции (в данном случае inputBox)
        result = inpt.get()
        dop.destroy()  # закрываем окно

    Button = tk.Button(dop, text='ок', command=callback)
    Button.pack()

    dop.wait_window()  # ждем закрытия окна
    return result

    
win = tk.Tk()

def show_result():
    res = inputBox(win)
    label_result['text'] = res


tk.Button(text="Show input box", command=show_result).pack()
label_result = tk.Label()
label_result.pack()

win.mainloop()
→ Ссылка