python3.0/tkinter设计一个计算器
最近在学习python GUI设计,试着做了一个计算器,能够实现加减乘除和求余。
感悟:1. 程序第一步是进行UI框架设计,窗口的大小,功能区的大小和位置设定。最好做个草图,有大概估计。
2. UI设计出来后才是功能模块的添加,需要对基本操作比较熟悉,例如:"{:.12g}".format(result)
3.程序运行结果如下,如有疑问可发email [email protected]:
""" 自己设计一个计算器,能够实现加减乘除和求余 """ # 计算器 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()