Python Tkinter возвращаемое значение из функции, используемой в команде

Как я могу получить возвращаемое значение от А до С? Кстати, я не пользуюсь классом.

def button:
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
    A = B.get()
    return A

B = StringVar()
C = ""
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0)
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1)

Ответы на вопрос(5)

Легко просто объявить глобальный.

def button:
global A
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
A = B.get()
return A

B = StringVar()`
C = ""
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0)
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1)
# and then A is not empty
B= A

вы не можете. Обратные вызовы не могут ничего вернуть, потому что некуда его вернуть - кроме цикла обработки событий, который ничего не делает с возвращаемыми значениями.

В приложении, основанном на событиях, вы обычно устанавливаете атрибут класса. Или, если вы новичок, вы можете установить глобальную переменную. Использование глобальной переменной не очень хорошая идея для реального кода, который нужно поддерживать с течением времени, но это нормально для экспериментов.

Так, например, так какC в вашем примере это глобальная переменная, вы должны сделать что-то вроде:

def button():
    global C
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
    A = B.get()
    C = A

Вы создаете дочерний классTkinter.Tkи определить переменную-членself.a в этом классе. Тогда вы можете имитировать поведение возврата

self.A = B.get()

Видеть,Вернуть значения текстовой записи Tkinter, закрыть GUI

Вы могли бы позвонитьC.set изнутриbutton функция:

def button:
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
    A = B.get()
    C.set(A)
    # return A   # return values are useless here

но большинство ответов предлагали глобальную переменную. Мне не нравится использовать слишком много глобальных переменных в моих проектах, поэтому вот мое решение.

При объявлении кнопки Tkinter вы можете использовать лямбда-функцию в качестве команды. Эта лямбда может взаимодействовать с переменными, которые находятся в том же пространстве имен, что и определяемая вами кнопка. Обязательно определите эту переменную перед инициализацией кнопки.

def button():
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0)
    A = B.get()
    return A

B = StringVar()
C = ""
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0)
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1)

Вам может понадобитьсяself в качестве аргумента в пользуbutton в зависимости от организации вашего проекта, но концепция та же. Лямбда-команды также полезны для передачи аргументов команде кнопки.

Ваш ответ на вопрос