【发布时间】:2017-03-08 13:11:33
【问题描述】:
我正在使用 appJar 创建一个 GUI,并且正在尝试检查是否单击了按钮,因此我想创建一个标志来执行此操作,但是它没有按我的预期工作。我希望程序执行以下操作:
场景 1:
1- 加载字典
2-单击“替换”按钮>字典未更新
场景 2:
1- 加载字典
2- 单击“更新字典”按钮 > 将标志设置为“是”
3- 点击“替换”按钮 > 重新加载字典
我的代码:
# defined flag globally
global flag
flag = 'no'
# Function to change the global var -flag-
def anyUpdate(f):
if f == 'yes':
flag = f # change global variable -flag- to 'yes'
return True
else:
return False
def press(btn):
# Edit dictionary clicked
if btn=="Update dictionary":
anyUpdate('yes') # call function - 'yes' sent
# Replace clicked
if btn=="Replace":
if someNotImportantCode:
someCode
else:
print flag # prints 'no' even if update dictionary clicked means global var didn't change
checkUpdate = anyUpdate(flag) # call function - global var sent
print checkUpdate # prints False of course since flag is 'no'
if checkUpdate == True:
# reload dictionary
reps = getDictionary()
如您所见,全局标志没有改变。我觉得我的想法不是很好,但是我尝试了不同的代码,但对我没有任何作用,我觉得卡住了。有什么帮助吗?
【问题讨论】:
-
flag在anyUpdate中是本地的。如果您在任何时候分配给它,您需要在一个范围内声明它是全局的。 (将global flag移至anyUpdate内部。查看stackoverflow.com/questions/929777/… 了解更多详情 -
我试过了,如果用户在第一次没有点击“更新字典”的情况下点击“替换”会报错(NameError: global name 'flag' is not defined)导致变量不是在单击“更新字典”之前定义。 @加文
-
如果我提出更改建议,它对我有用,所以除非你在
someNotImportantCode或someCode中有分配给flag的东西,否则你应该没问题。我会写一个答案给你看。