tkinter - 全局变量:名称未定义
问题描述
所以我试图建立一个计算器:
def button_add():
first_num = e.get()
global f_num
global math
math = "add"
f_num = int(first_num)
e.delete(0, END)
def button_min():
first_num = e.get()
global f_num
global math
math = "min"
f_num = int(first_num)
e.delete(0, END)
def button_equal():
second_num = e.get()
e.delete(0, END)
global math
if math == "add":
e.insert(0, f_num + int(second_num))
elif math == "min":
e.insert(0, f_num - int(second_num))
# Button command
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal())
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add())
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min())
但是运行之后我遇到了一个错误:
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 89, in <module>
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m",command=button_equal())
File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 52, in button_equal
if math == "add":
NameError: name 'math' is not defined
我是初学者,我遵循了本指南,并且我已经仔细检查了代码,使其与视频中的代码相匹配。为什么不global
工作?这与我使用的 Python 版本有什么关系吗?
附言。我只包括我的一些代码,因为其余的与我的问题无关。
解决方案
使用时command=button_equal()
,button_equal()
会立即执行。那时math
(最好不要使用标准模块名作为变量名)没有定义。
您应该将函数引用(不带 的函数名称()
)分配给command
选项:
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal)
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add)
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min)
请注意,如果在单击或=之前单击,则会引发相同的异常。所以最好先初始化:+-math
math = None
equal = Button(...)
推荐阅读
- docker - 如何在 docker 中处理 ef 核心迁移?
- python - Smartsheet API 1006 错误 - 权限?参考?
- visual-studio-code - 在 vs 代码扩展视图中阻止多媒体内容
- data-structures - 单下堆操作与单上堆操作
- typescript - 如何将 Gatsby 与 TypeScript 和 Netlify 函数一起使用
- python - 尝试在 cpp scritp 中模仿 Python 中的 fsolve 函数以获得简单的函数
- python - 问题:如何在repli中用python生成新文件
- r - r 中的数据(county.fip)中不存在县 FIPS(即使在 VA 中!)
- javascript - 将数据(从 SQLite 查询中获取)从 Flask 发送到 Javascript 以创建图表
- android - 哪些国家/地区会在 Play 商店中看到每个语言环境?