Python实战项目——简易计算器(Tkinter图形化界面)

项目简介

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的我,很重要,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的墨菲特i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值