python3.0/tkinter设计一个计算器

最近在学习python GUI设计,试着做了一个计算器,能够实现加减乘除和求余。

感悟:1. 程序第一步是进行UI框架设计,窗口的大小,功能区的大小和位置设定。最好做个草图,有大概估计。

            2. UI设计出来后才是功能模块的添加,需要对基本操作比较熟悉,例如:"{:.12g}".format(result) 

            3.程序运行结果如下,如有疑问可发email [email protected]

python3.0/tkinter设计一个计算器_第1张图片

"""
自己设计一个计算器,能够实现加减乘除和求余
"""

# 计算器
from tkinter import *

class Calculator:
    def __init__(self):
        # 新建一个窗口
        self.frame = Tk()
        # 指定窗体的标题
        self.frame.title("我的计算器")
        #指定窗体大小
        self.frame.geometry("320x500")
        # 窗体不允许变化
        self.frame.resizable(0,0)

        # # 添加顶部Lable 标签--显示具体表达式
        self.var_detail = StringVar()
        self.Lable_datail = Label(self.frame, text="25+100=", textvariable=self.var_detail, font=("微软雅黑", 16), bg="lightGreen", fg="DimGray",anchor="se")
        self.Lable_datail.place(x=0, y=0, width=320, height=200)

        # 添加结果标签 --显示结果
        self.var_result = StringVar()
        self.Lable_result = Label(self.frame, text="125", textvariable=self.var_result, font=("微软雅黑", 16), bg="SkyBlue",anchor="se")
        self.Lable_result.place(x=0, y=200, width= 320, height=50)

        # 添加按钮 -ac
        self.Button_ac = Button(self.frame, text="AC", font=("微软雅黑",18), fg="Orange", command=self.ac)
        self.Button_ac.place(x=0, y=250, width=80, height=50)

        # 添加按钮 " <- " 删除
        self.Button_del = Button(self.frame, text="<-", font=("微软雅黑", 18), fg="DimGray", command=self.delete)
        self.Button_del.place(x=80, y=250, width=80, height=50)

        # 添加按钮 :除法 ÷
        self.Button_div = Button(self.frame, text="÷", font=("微软雅黑", 18), fg="DimGray", command=self.division)
        self.Button_div.place(x=160, y=250, width=80, height=50)

        # 添加按钮 :乘法 ×
        self.Button_mul = Button(self.frame, text="×", font=("微软雅黑", 18),fg="DimGray", command=self.mul)
        self.Button_mul.place(x=240, y=250, width=80, height=50)

        # 添加按钮 :7
        self.Button_seven = Button(self.frame, text="7", font=("微软雅黑", 18), fg="DimGray", command=self.get_seven)
        self.Button_seven.place(x=0, y=300, width=80, height=50)

        # 添加按钮 :8
        self.Button_eight = Button(self.frame, text="8", font=("微软雅黑", 18), fg="DimGray", command=self.get_eight)
        self.Button_eight.place(x=80, y=300, width=80, height=50)

        # 添加按钮 :9
        self.Button_nine = Button(self.frame, text="9", font=("微软雅黑", 18), fg="DimGray", command=self.get_nine)
        self.Button_nine.place(x=160, y=300, width=80, height=50)

        # 添加按钮 :“- ”
        self.Button_minus = Button(self.frame, text="-", font=("微软雅黑", 18), fg="DimGray", command=self.sub)
        self.Button_minus.place(x=240, y=300, width=80, height=50)

        # 添加按钮 :4
        self.Button_four = Button(self.frame, text="4", font=("微软雅黑", 18), fg="DimGray", command=self.get_four)
        self.Button_four.place(x=0, y=350, width=80, height=50)

        # 添加按钮 :5
        self.Button_five = Button(self.frame, text="5", font=("微软雅黑", 18), fg="DimGray", command=self.get_five)
        self.Button_five.place(x=80, y=350, width=80, height=50)

        # 添加按钮 :6
        self.Button_six = Button(self.frame, text="6", font=("微软雅黑", 18), fg="DimGray", command=self.get_six)
        self.Button_six.place(x=160, y=350, width=80, height=50)

        # 添加按钮 :“+ ”
        self.Button_plus = Button(self.frame, text="+", font=("微软雅黑", 18), fg="DimGray", command=self.add)
        self.Button_plus.place(x=240, y=350, width=80, height=50)

        # 添加按钮 :1
        self.Button_one = Button(self.frame, text="1", font=("微软雅黑", 18), fg="DimGray", command=self.get_one)
        self.Button_one.place(x=0, y=400, width=80, height=50)

        # 添加按钮 :2
        self.Button_two = Button(self.frame, text="2", font=("微软雅黑", 18), fg="DimGray", command=self.get_two)
        self.Button_two.place(x=80, y=400, width=80, height=50)

        # 添加按钮 :3
        self.Button_three = Button(self.frame, text="3", font=("微软雅黑", 18), fg="DimGray", command=self.get_three)
        self.Button_three.place(x=160, y=400, width=80, height=50)

        # 添加按钮 : 取余 %
        self.Button_remainder = Button(self.frame, text="%", font=("微软雅黑", 18), fg="DimGray", command=self.get_remainder)
        self.Button_remainder.place(x=0, y=450, width=80, height=50)

        # 添加按钮 : 0
        self.Button_zero = Button(self.frame, text="0", font=("微软雅黑", 18), fg="DimGray", command=self.get_zero)
        self.Button_zero.place(x=80, y=450, width=80, height=50)

        # 添加按钮 : .
        self.Button_point = Button(self.frame, text=".", font=("微软雅黑", 18), fg="DimGray", command=self.get_point)
        self.Button_point.place(x=160, y=450, width=80, height=50)

        # 添加按钮 : =
        self.Button_equal = Button(self.frame, text="=", font=("微软雅黑", 18), bg="Orange", command=self.get_result)
        self.Button_equal.place(x=240, y=400, width=80, height=100)


    def ac(self):
        self.var_result.set("0")

    def delete(self):
        # 删除最后一个字符
        content = self.var_result.get()
        self.var_result.set(content[0:len(content)-1])

    def add(self):
        content = self.var_result.get()
        # 为明细赋值
        self.var_detail.set(content + " + ")
        # result 归0
        self.var_result.set("0")

    def sub(self):
        content = self.var_result.get()
        # 为明细赋值
        self.var_detail.set(content + " - ")
        # result 归0
        self.var_result.set("0")

    def mul(self):
        content = self.var_result.get()
        # 为明细赋值
        self.var_detail.set(content + " × ")
        # result 归0
        self.var_result.set("0")

    def division(self):
        content = self.var_result.get()
        # 为明细赋值
        self.var_detail.set(content + " ÷ ")
        # result 归0
        self.var_result.set("0")

    def get_remainder(self):
        content = self.var_result.get()
        # 为明细赋值
        self.var_detail.set(content + " % ")
        # result 归0
        self.var_result.set("0")

    def get_result(self):
        # 获取detail 明细
        detail = self.var_detail.get()
        num01 = detail.replace(" ", "")[0:len(detail.replace(" ", ""))-1]
        # 操作符取倒数第一个
        action = detail.replace(" ", "")[-1]
        num02 = self.var_result.get()
        # 根据操作符进行操作
        if action == "+":
            result = float(num01) + float(num02)
            # 修改明细
            self.var_detail.set("{0} + {1} = ".format(num01, num02))
            # 修改result  
            self.var_result.set("{:.12g}".format(result))

        if action =="-":
            result = float(num01) - float(num02)
            # 修改明细
            self.var_detail.set("{0} - {1} = ".format(num01, num02))
            # 修改result
            self.var_result.set("{:.12g}".format(result))

        if action =="×":
            result = float(num01) * float(num02)
            # 修改明细
            self.var_detail.set("{0} × {1} = ".format(num01, num02))
            # 修改result
            self.var_result.set("{:.12g}".format(result))

        if action =="÷":
            result = float(num01) / float(num02)
            # 修改明细
            self.var_detail.set("{0} ÷ {1} = ".format(num01, num02))
            # 修改result
            self.var_result.set("{:.12g}".format(result))

        if action =="%":
            result = float(num01) % float(num02)
            # 修改明细
            self.var_detail.set("{0} % {1} = ".format(num01, num02))
            # 修改result
            self.var_result.set("{:.12g}".format(result))




    def get_one(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("1")
        else:
            self.var_result.set(content + "1")

    def get_two(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("2")
        else:
            self.var_result.set(content + "2")

    def get_three(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("3")
        else:
            self.var_result.set(content + "3")

    def get_four(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("4")
        else:
            self.var_result.set(content + "4")

    def get_five(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("5")
        else:
            self.var_result.set(content + "5")

    def get_six(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("6")
        else:
            self.var_result.set(content + "6")

    def get_seven(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("7")
        else:
            self.var_result.set(content + "7")

    def get_eight(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("8")
        else:
            self.var_result.set(content + "8")

    def get_nine(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("9")
        else:
            self.var_result.set(content + "9")

    def get_zero(self):
        content = self.var_result.get()
        if content == "0":
            self.var_result.set("0")
        else:
            self.var_result.set(content + "0")

    def get_point(self):
        content = self.var_result.get()
        self.var_result.set(content + ".")


    def show(self):
        self.frame.mainloop()


if __name__ == "__main__":
    my_cal = Calculator()
    my_cal.show()

你可能感兴趣的:(Python)