2017-02-13 117 views
0

我正在使用tkinter並嘗試在按鈕按下時將值分配給全局變量。這裏是代碼: popup.add_command(label="Allow Moving Item", command=lambda: allowMoving=True) 我得到無效的語法。你能告訴我如何解決這個問題嗎? 非常感謝!lambda爲全局變量賦值?

+1

使用功能。不要使用全局變量。 – Daniel

+0

避免全局變量。如果您需要答案,請參閱http://stackoverflow.com/a/21054384/1627968。 – benjamin

+0

'command = lambda:allowMoving = True' - >'SyntaxError:can not assign to lambda'('lambda's只能包含一個表達式,沒有語句)。用正常定義的函數的名稱替換它。 – martineau

回答

0

僅用於娛樂目的。

popup.add_command(label="Allow Moving Item", 
        command=lambda: globals().update(allowMoving=True)) 

(雖然globals()沒有使用相同的「不修改返回值」的警告,locals()記錄,我仍然不知道這是保證工作。)


更好回答是使用def語句來定義回調。

def set_allow_moving(): 
    global allow_moving # Don't use camel case for variable names in Python 
    allow_moving = True 

popup.add_command(label="Allow Moving Item", command=set_allow_moving) 
+0

謝謝,globals()。update(allowMoving = True)方法有效。額外的問題 - 如果它是局部變量,我可以改變它沒有全局變量?附:我不需要lambda – sssseossss

1

請勿使用lambda。一個好的經驗法則是永遠不要使用lambda,除非沒有別的辦法。在回調中使用lambda應該是例外而非規則。

def allow_moving(): 
    global allowMoving 
    allowMoving = True 

popup.add_command(label="Allow Moving Item", command=allow_moving)