2017-02-21 36 views
0

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

Это программа;

button1 = Button(loginPage,text = "Login", fg = "red", command = lambda : loginClicked(username.get(), password.get())) 

и инструкция return return выглядит так:

return loggedIn,userID 

Я знаю, что функция запускается из-за печати в нем.

Поскольку функция может быть запущена только при вводе входных данных в пользовательский интерфейс Tkinter и нажатии кнопки, как можно будет вернуть возвращаемые результаты функции для последующего использования в программе.

ответ

0

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

Например, вы можете использовать две переменные, которые вы определили ранее как глобальные.

loggedIn = None 
userID = None 

def loginClicked(username, password): 
    global loggedIn 
    global userID 
    loggedIn,userID = username, password 

button1 = Button(loginPage,text = "Login", fg = "red", command = lambda : loginClicked(username.get(), password.get())) 
0

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

1

Удалите использование lambda и просто вызовите функцию. Я вижу, что люди используют lambda все время с tkinter, когда он не нужен lambda использует его, но в этом случае все, что он делает, делает код более трудным для чтения и сложнее в обслуживании. Как хорошее эмпирическое правило, кнопка или привязка всегда должны вызывать функцию.

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

def loginClicked(): 
    global loggedIn, userID 

    name = username.get() 
    pw = password.get() 

    <do the login> 

    loggedIn = True 
    userID = name 


button1 = Button(..., command = loginClicked)