自己做了一个计算器

自己做了一个计算器

语言:Python3
主要模块:Tkinter
正负号禁用,因为不会写了。
制作思路:上面就是一个单文本框,点击按键还是键盘输入都是在文本框中显示,最后 = 的时候用 eval 计算文本框中的字符串,结果再放回到文本框中去。MC、 M+ 、M- 、MR 可用。对文本框中的字符串没有校验,输入错误时无提示,计算无反应,因为后台己经出错了。
在这里插入图片描述

# coding=utf-8

from tkinter import *
from tkinter import messagebox
from random import choice
import math


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.createWidget()
        self.pack()
        # 调用添加小部件,给GUI添加小部件

    def createWidget(self):
        # 需要添加的小部件
        global result, stre, mm, v1, arr, arrcommand
        mm = IntVar()
        mm.set(0)
        v1 = StringVar()
        v1.set("")
        stre = StringVar()
        stre.set("")
        arr = [["(",")","±","/","*"],["7","8","9","-"],["4","5","6","+"],["1","2","3"],["0","."]]
        arrcommand=[[],[],[],[],[]]
        self.ent01 = Entry(self, textvariable=v1)
        self.ent01.grid(row=0, column=0, columnspan=4)
        self.btn01 = Button(self, text="MC", command=self.mc, width=4)
        self.btn01.grid(row=1, column=0)
        self.btn02 = Button(self, text="M+", command=self.mplus, width=4)
        self.btn02.grid(row=1, column=1)
        self.btn03 = Button(self, text="M-", command=self.mminus, width=4)
        self.btn03.grid(row=1, column=2)
        self.btn04 = Button(self, text="MR",  command=self.mr, width=4)
        self.btn04.grid(row=1, column=3)
        self.btn05 = Button(self, text="C", command=self.clear, width=4)
        self.btn05.grid(row=1, column=4)
        for i in range(5):
            n = 0
            for j in arr[i]:
                arrcommand[i].append(Button(self, text=arr[i][n]))
                arrcommand[i][n].grid(row=i+2, column=n if j != "." else n + 1, columnspan=2 if (i!=0 and n==3) or j == "0" else 1, sticky=NSEW)
                if j != "±":
                    arrcommand[i][n]["command"] = lambda m=arrcommand[i][n]["text"]: v1.set(v1.get() + m)
                else:
                    arrcommand[i][n]["command"] = lambda m=arrcommand[i][n]["text"]: v1.set(v1.get() + m)
                    arrcommand[i][n].config(state="disabled")
                n += 1

        self.btncalculation = Button(self, text="=", command=self.calculationNum)
        self.btncalculation.grid(row=5, column=3, rowspan=2, columnspan=2, sticky=NSEW)


    def calculationNum(self):
        if v1.get() != "":
            v1.set(str(eval(v1.get())))

    def mc(self):
        mm.set(0)

    def mr(self):
        v1.set(v1.get() + str(mm.get()))

    def mplus(self):
        mm.set(mm.get() + eval(v1.get()))
        v1.set("")

    def mminus(self):
        mm.set(mm.get() - eval(v1.get()))
        v1.set("")

    def clear(self):
        v1.set("")


if __name__ == "__main__":
    root = Tk()
    root.geometry("200x300+300+100")
    root.title("自制计算器")
    app = Application(master=root)
    root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值