代码捉虫
这是个计算机,Python写的,有界面,计算不了,大佬帮忙捉虫 本帖最后由 Ucraft 于 2024-5-31 19:50 编辑借用ChatGPT-4o对该文件进行了分析:
您的Python代码中有几个问题,需要进行修正。以下是详细的分析和建议:
[*]函数isPressEqual定义冲突:
[*]您定义了一个名为isPressEqual的函数,但之前这个名字已经被用作全局变量。这会导致命名冲突,影响程序的正常运行。将函数名更改为不同的名称,例如pressEqual。
[*]变量定义和使用:
[*]在多个地方使用了全局变量lists和isPressEqual。为了确保这些变量在函数内部被正确引用,需要在函数开头声明global。
[*]公式字符串拼接错误:
[*]公式字符串拼接处使用了错误的注释,应该使用"".join(lists)而不是.join(lists)。
[*]按钮文本重复:
[*]btn_percent和btn_equal按钮的文本内容都是=。这可能是个错误,应该将btn_percent的文本改为%。
[*]字符编码问题:
[*]在某些操作系统上,字体名称中的中文字符可能会引起问题。确保您的操作系统和Python环境支持这些字体。
以下是修正后的代码:
import tkinter
# 创建主窗口
window = tkinter.Tk()
window.minsize(600, 505)
window.maxsize(600, 505)
window.title("计算器")
# 定义变量
show_top = tkinter.StringVar()
show_top.set("")
show_bottom = tkinter.StringVar()
show_bottom.set(0)
# 定义标签
labell = tkinter.Label(window, font=("微软雅黑", 20),
bg="#C0FAF9", fg="#828282", anchor="se",
textvariable=show_top, bd="9")
label2 = tkinter.Label(window, font=("微软雅黑", 30),
bg="#EEE9E9", fg="black", anchor="se",
textvariable=show_bottom, bd="9")
labell.place(width=600, height=140)
label2.place(y=140, width=600, height=90)
# 定义按钮
def create_button(window, text, x, y, command):
return tkinter.Button(window, text=text, font=("微软雅黑", 20),
fg="black", bd=5, command=command).place(x=x, y=y, width=150, height=55)
buttons = {
'0': (150, 450), '1': (0, 395), '2': (150, 395), '3': (300, 395),
'4': (0, 340), '5': (150, 340), '6': (300, 340), '7': (0, 285),
'8': (150, 285), '9': (300, 285), '.': (300, 450)
}
for btn_text, (x, y) in buttons.items():
create_button(window, btn_text, x, y, lambda t=btn_text: pressNum(t))
btn_ac = tkinter.Button(window, text="AC", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("AC"))
btn_back = tkinter.Button(window, text="←", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("b"))
btn_division = tkinter.Button(window, text="÷", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("/"))
btn_multiplication = tkinter.Button(window, text="×", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("*"))
btn_subtraction = tkinter.Button(window, text="-", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("-"))
btn_addition = tkinter.Button(window, text="+", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("+"))
btn_equal = tkinter.Button(window, text="=", font=("微软雅黑", 20),
fg="#4F4F4F", bd=5,
command=lambda: pressEqual())
btn_percent = tkinter.Button(window, text="%", font=("微软雅黑", 20),
fg="orange", bd=5,
command=lambda: pressSign("%"))
btn_ac.place(x=0, y=230, width=150, height=55)
btn_back.place(x=150, y=230, width=150, height=55)
btn_division.place(x=300, y=230, width=150, height=55)
btn_multiplication.place(x=450, y=230, width=150, height=55)
btn_subtraction.place(x=450, y=285, width=150, height=55)
btn_addition.place(x=450, y=340, width=150, height=55)
btn_equal.place(x=450, y=395, width=150, height=110)
btn_percent.place(x=0, y=450, width=150, height=55)
# 全局变量
lists = []
isPressSign = False
isPressEqual = False
# 定义函数
def pressNum(num):
global lists
global isPressSign
global isPressEqual
if isPressSign:
show_bottom.set(0)
isPressSign = False
if isPressEqual:
show_bottom.set(0)
isPressEqual = False
original_num = show_bottom.get()
if original_num == "0":
show_bottom.set(num)
else:
existing_num = original_num + num
show_bottom.set(existing_num)
def pressSign(sign):
global lists
global isPressSign
num = show_bottom.get()
lists.append(num)
lists.append(sign)
isPressSign = True
if sign == "AC":
lists.clear()
show_bottom.set(0)
if sign == "b":
a = num
lists.clear()
show_bottom.set(a)
if len(a) == 0:
show_bottom.set(0)
def pressEqual():
global lists
global isPressEqual
isPressEqual = True
num = show_bottom.get()
lists.append(num)
formula = "".join(lists)
try:
result = eval(formula)
except:
result = "Error"
show_bottom.set(result)
show_top.set(formula)
lists.clear()
window.mainloop()
此代码修正了上述问题,并使计算器正常运行。请注意,eval函数用于计算表达式时存在安全风险,因此仅在信任输入的情况下使用。在生产环境中,应使用更安全的解析和计算方法。
你可以先测试一下,稍后我也会测试更正后的代码的可行性
Ucraft 发表于 2024-5-31 19:48
借用ChatGPT-4o对该文件进行了分析:
您的Python代码中有几个问题,需要进行修正。以下是详细的分析和建议: ...
byd科技改变生活 事Python大佬) Crigo 发表于 2024-5-31 20:21
事Python大佬)
事刚刚入门)
页: [1]