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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章