项目简介
1.功能说明:
- 利用Python做一个计算器,可计算加减乘除。
2.解决问题:
之前学习的时候做了一个简易计算器,但是有以下几个问题:
- 计算带小数的运算时,显示异常;
- 无法进行连续运算,每运算一次,程序终止,需手动重新启动程序;
3.Python库:Tkinter模块
- Python的标准Tk GUI工具包的接口;
- Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口;
- Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Mac OS系统里.Tk8.0的后续版本可以通过ttk实现本地窗口风格,并良好地运行在绝大多数平台中;
4.代码框架
# Tkinter模块的基础框架
# by mofitte
# 20240827
import tkinter as tk
# 创建窗口对象
window = tk.Tk()
# 创建标签组件
label = tk.Label(window, text="Hello, Tkinter!")
label.pack()
# 创建按钮组件
button = tk.Button(window, text="Click me!")
button.pack()
# 运行主循环
window.mainloop()
5.最终效果
6. 项目代码
import tkinter
app = tkinter.Tk()
app.geometry("400x500+500+200") # 创建窗口,宽度x高度+相对位置水平+相对位置垂直
app.maxsize(400, 500) # 窗口的最大尺寸
app.minsize(400, 500) # 窗口的最小尺寸
app.title("计算器") # 窗口标题
app_lable = tkinter.Label(app, text='墨菲特', font=12) # 作者名称标签
app_lable.place(x=140, y=450, width=100, height=30)
app_text = tkinter.Entry(app, font=45,justify='right') # 计算机运算显示框
app_text.place(x=30, y=20, width=340, height=80) # 计算机运算显示框样式
def calculate(result): # 计算器运算逻辑
try:
if '+' in result:
parts = result.split('+')
print(parts)
return int(parts[0]) + int(parts[1])
elif '-' in result:
parts = result.split('-')
return int(parts[0]) - int(parts[1])
elif 'x' in result:
parts = result.split('x')
return int(parts[0]) * int(parts[1])
elif '/' in result:
parts = result.split('/')
if int(parts[1]) == 0:
return "除数不能为 0"
return int(parts[0]) / int(parts[1])
except (ValueError, ZeroDivisionError):
return "错误的计算表达式"
# 定义按钮事件
def button_click_but1(event):
app_text.insert('end', 1)
def button_click_but2(event):
app_text.insert('end', 2)
def button_click_but3(event):
app_text.insert('end', 3)
def button_click_but4(event):
app_text.insert('end', 4)
def button_click_but5(event):
app_text.insert('end', 5)
def button_click_but6(event):
app_text.insert('end', 6)
def button_click_but7(event):
app_text.insert('end', 7)
def button_click_but8(event):
app_text.insert('end', 8)
def button_click_but9(event):
app_text.insert('end', 9)
def button_click_but0(event):
app_text.insert('end', 0)
def button_click_add(event):
app_text.insert('end', '+')
def button_click_sub(event):
app_text.insert('end', '-')
def button_click_mul(event):
app_text.insert('end', 'x')
def button_click_div(event):
app_text.insert('end', '/')
def button_click_tol(self, result=None):
# app_text.insert('end', '=')
result = app_text.get()
cal_result = calculate(result)
print(cal_result)
app_text.delete(0, 'end') # 先清空输入框
app_text.insert('end', cal_result) # 再插入计算结果
def button_click_pot(event):
app_text.insert('end', '.')
def button_click_cls(event): # C键清除内容
app_text.delete('0', 'end')
# 绑定按钮事件
but1 = tkinter.Button(app, font=14, text='1')
but1.bind("<Button-1>", button_click_but1)
but2 = tkinter.Button(app, font=14, text='2')
but2.bind("<Button-1>", button_click_but2)
but3 = tkinter.Button(app, font=14, text='3')
but3.bind("<Button-1>", button_click_but3)
but4 = tkinter.Button(app, font=14, text='4')
but4.bind("<Button-1>", button_click_but4)
but5 = tkinter.Button(app, font=14, text='5')
but5.bind("<Button-1>", button_click_but5)
but6 = tkinter.Button(app, font=14, text='6')
but6.bind("<Button-1>", button_click_but6)
but7 = tkinter.Button(app, font=14, text='7')
but7.bind("<Button-1>", button_click_but7)
but8 = tkinter.Button(app, font=14, text='8')
but8.bind("<Button-1>", button_click_but8)
but9 = tkinter.Button(app, font=14, text='9')
but9.bind("<Button-1>", button_click_but9)
but0 = tkinter.Button(app, font=14, text='0')
but0.bind("<Button-1>", button_click_but0)
but_add = tkinter.Button(app, font=14, text='+')
but_add.bind("<Button-1>", button_click_add)
but_sub = tkinter.Button(app, font=14, text='-')
but_sub.bind("<Button-1>", button_click_sub)
but_mul = tkinter.Button(app, font=14, text='*')
but_mul.bind("<Button-1>", button_click_mul)
but_div = tkinter.Button(app, font=14, text='/')
but_div.bind("<Button-1>", button_click_div)
but_pot = tkinter.Button(app, font=14, text='.')
but_pot.bind("<Button-1>", button_click_pot)
but_tol = tkinter.Button(app, font=14, text='=')
but_tol.bind("<Button-1>", button_click_tol)
but_cls = tkinter.Button(app, font=14, text='C')
but_cls.bind("<Button-1>", button_click_cls)
# 添加按钮、按钮样式、位置
but1.place(x=30, y=280, width=70, height=30)
but2.place(x=110, y=280, width=70, height=30)
but3.place(x=190, y=280, width=70, height=30)
but4.place(x=30, y=220, width=70, height=30)
but5.place(x=110, y=220, width=70, height=30)
but6.place(x=190, y=220, width=70, height=30)
but7.place(x=30, y=160, width=70, height=30)
but8.place(x=110, y=160, width=70, height=30)
but9.place(x=190, y=160, width=70, height=30)
but0.place(x=30, y=340, width=70, height=30)
but_add.place(x=280, y=160, width=70, height=30)
but_sub.place(x=280, y=220, width=70, height=30)
but_mul.place(x=280, y=280, width=70, height=30)
but_div.place(x=280, y=340, width=70, height=30)
but_tol.place(x=210, y=400, width=110, height=40)
but_cls.place(x=50, y=400, width=110, height=40)
but_pot.place(x=110, y=340, width=70, height=30)
# 窗口始终显示
app.mainloop()
7 待解决问题
1.目前冗余代码较多,需简化;
2.无退格(删除)按钮,待添加;
3.美化界面;
4.小数运算待完善;
—————————————————分割线———————————————————
该项目也会持续更新,请关注我吧。
觉得我做的还行的,顺手点个赞再走。
这对于刚开始学python的我,很重要,感谢!