2017-02-13 109 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)