python实现简单计算器

需求

使用python的tkinter库实现简单的加减乘除计算器程序,并展示界面

程序效果

代码实现

import tkinter as tk

class Calculator:
    def __init__(self, master):
        self.master = master
        master.title("计算器")

        # 创建显示屏
        self.display = tk.Entry(master, width=20, font=('Arial', 20), justify='right')
        self.display.grid(row=0, column=0, columnspan=4)

        # 定义按钮
        buttons = [
            ('7', 1, 0), ('8', 1, 1), ('9', 1, 2),
            ('4', 2, 0), ('5', 2, 1), ('6', 2, 2),
            ('1', 3, 0), ('2', 3, 1), ('3', 3, 2),
            ('0', 4, 1),
            ('+', 1, 3), ('-', 2, 3), ('*', 3, 3), ('/', 4, 3),
            ('=', 4, 2), ('C', 4, 0), ('<-', 5, 0)
        ]

        for (text, row, col) in buttons:
            button = tk.Button(master, text=text, width=5, height=2, command=lambda t=text: self.on_button_click(t))
            button.grid(row=row, column=col)

    def on_button_click(self, char):
        if char == '=':
            try:
                result = str(eval(self.display.get()))
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, result)
            except Exception as e:
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, 'Error')
        elif char == 'C':
            self.display.delete(0, tk.END)
        elif char == '<-':
            current_text = self.display.get()
            self.display.delete(len(current_text) - 1)
        else:
            self.display.insert(tk.END, char)

if __name__ == "__main__":
    root = tk.Tk()
    calculator = Calculator(root)
    root.mainloop()

代码说明

  • __init__(self, master): 这是 Calculator 类的构造函数,用于初始化计算器的各个组件。
    • self.master = master: 将传入的主窗口对象赋值给 self.master,以便在其他方法中使用。
    • master.title("计算器"): 设置主窗口的标题为“计算器”。
    • self.display = tk.Entry(master, width=20, font=('Arial', 20), justify='right'): 创建一个输入框(显示屏),用于显示用户的输入和计算结果。设置宽度为 20 个字符,字体为 Arial,字号为 20,文本右对齐。
    • self.display.grid(row=0, column=0, columnspan=4): 使用 grid 布局管理器将显示屏放置在第 0 行,从第 0 列开始,跨 4 列。
    • buttons: 定义一个包含按钮信息的列表,每个元素是一个元组,包含按钮的文本、行位置和列位置。
    • for (text, row, col) in buttons: 遍历按钮列表,为每个按钮创建一个 Button 控件,并设置其位置。
    • button = tk.Button(master, text=text, width=5, height=2, command=lambda t=text: self.on_button_click(t)): 创建一个按钮,设置按钮的文本、宽度、高度,并绑定点击事件到 on_button_click 方法。
    • button.grid(row=row, column=col): 使用 grid 布局管理器将按钮放置在指定的位置。
  • on_button_click(self, char): 这个方法用于处理按钮点击事件。
    • if char == '=': 如果点击的是等号按钮,尝试计算显示屏中的表达式。
      • result = str(eval(self.display.get())): 使用 eval 函数计算显示屏中的表达式,并将结果转换为字符串。
      • self.display.delete(0, tk.END): 清空显示屏。
      • self.display.insert(tk.END, result): 将计算结果显示在显示屏上。
    • elif char == 'C': 如果点击的是清除按钮,清空显示屏。
      • self.display.delete(0, tk.END): 清空显示屏。
    • elif char == '<-': 如果点击的是删除按钮,删除显示屏中最后一个字符。
      • current_text = self.display.get(): 获取当前显示屏中的文本。
      • self.display.delete(len(current_text) - 1): 删除最后一个字符。
    • else: 对于其他按钮,将按钮上的字符添加到显示屏中。
      • self.display.insert(tk.END, char): 将字符添加到显示屏的末尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

licy__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值