最近在學習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()