我有一个tkinter GUI计算器,我已经研究了一段时间。我用它作为踏脚石来学习python中更复杂的东西。目前每按一次按钮,它就会执行一个与该号码相对应的功能(我知道这可能不是最好的方式,但我只是想自己做事并彻底了解事情而不是被抛出代码来复制和粘贴)我决定将我的所有数字0-9更改为一个函数编号(num),然后检查函数中输入的数字是什么并做了什么。
当我使用新的数字函数执行我的代码时,我收到错误
NameError: global name 'answerDisplay' is not defined
--> 120 canvas.itemconfig(answerDisplay, text=str(operationOne))
但在我的函数zero()到nine()中我没有遇到这个问题。 answerDisplay变量在文件的底部定义,但通常在我的新数字(num)函数中有效。这是我的source code没有错误,我的源代码是causes errors.
答案 0 :(得分:0)
您的问题出在以下代码行中:
S3
您需要为命令参数提供实际函数,而不是函数的结果。因此最终不能有numberZero = Button(root, text='0', command=number(0))
。如果参数是像你的那样的文字(不是变量),那么你可以使用()
来创建一个快速函数:
lambda
如果您想使用文字或变量,则需要使用numberZero = Button(root, text='0', command=lambda: number(0))
:
functools.partial
作为旁注:您的号码功能不需要单独检查每个号码。它可以简化为:
from functools import partial
numberZero = Button(root, text='0', command=partial(number, 0))
我还建议您查看字符串格式,而不是像这样添加字符串。