Python制作一个简单的计算器示例(第2节)


用Python编写一个简单的计算器程序

我们几乎每个人都用过计算器。计算器的整体结构比较简单,主要包括:显示器、键盘、运算处理等,计算器的图形界面我们使用Python中的Tkinter模块实现。Tkinter是Python内置的图形用户界面(GUI)模块,它提供了创建GUI应用软件程序所需的所有组件和工具。它使用Tcl/Tk工具包来实现GUI,因此可以在多个平台上运行,包括Windows、Linux和Mac OS X等。Tkinter包含了许多常用软件所需的GUI组件,如按钮、标签、文本框、滚动条、菜单等,同时还可以通过Python开发自定义组件。

Python制作一个简单的计算器同样只需要运行一个包含计算器代码的文件(以“.py”为后缀名),就可以弹出计算器页面,计算器完整的代码如下:

from tkinter import *

class Application(Frame) :
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.result = StringVar()
        self.equation = StringVar()
        self.result.set(' ')
        self.equation.set('0')
        self.designFrame()

    def designFrame(self) :
        frame = Frame(Windows, borderwidth=2, relief="groove")
        frame.grid(row=0, column=0, columnspan=5, padx=10, pady=10)
        lb = Label(frame, textvariable=self.equation, bg="white", font=("黑体", 28), anchor=SE, width=19, height=1)
        lb.grid(row=0, column=0, columnspan=5)
        lb1 = Label(frame, textvariable=self.result, bg="white", font=("黑体", 28), anchor=SE, width=19, height=1)
        lb1.grid(row=1, column=0, columnspan=5)
        bu_clear = Button(Windows, text="C", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.clear())
        bu_clear.grid(padx=5,pady=5, row=2,column=0)
        bu_back = Button(Windows, text="←", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.back())
        bu_back.grid(padx=5, pady=5,row=2,column=1)
        bu_chu = Button(Windows, text="/", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("/"))
        bu_chu.grid(padx=5, pady=5, row=2, column=2)
        bu_cal = Button(Windows, text="*", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("*"))
        bu_cal.grid(padx=5, pady=5, row=2, column=3)
        bu_7 = Button(Windows, text="7", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("7"))
        bu_7.grid(padx=5,pady=5,row=3,column=0)
        bu_8 = Button(Windows, text="8", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("8"))
        bu_8.grid(padx=5,pady=5,row=3,column=1)
        bu_9 = Button(Windows, text="9", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("9"))
        bu_9.grid(padx=5,pady=5,row=3,column=2)
        bu_sub = Button(Windows, text="-", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("-"))
        bu_sub.grid(padx=5, pady=5, row=3, column=3)
        bu_4 = Button(Windows, text="4", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("4"))
        bu_4.grid(padx=5,pady=5,row=4,column=0)
        bu_5 = Button(Windows, text="5", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("5"))
        bu_5.grid(padx=5,pady=5,row=4,column=1)
        bu_6 = Button(Windows, text="6", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("6"))
        bu_6.grid(padx=5,pady=5,row=4,column=2)
        bu_add = Button(Windows, text="+", bg="#92f0ff", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("+"))
        bu_add.grid(padx=5, pady=5, row=4, column=3)
        bu_1 = Button(Windows, text="1", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("1"))
        bu_1.grid(padx=5,pady=5,row=5,column=0)
        bu_2 = Button(Windows, text="2", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("2"))
        bu_2.grid(padx=5,pady=5,row=5,column=1)
        bu_3 = Button(Windows, text="3", bg="white", font=("黑体", 20), width=5, height=1, command=lambda: self.calculation("3"))
        bu_3.grid(padx=5,pady=5,row=5,column=2)
        bu_count = Button(Windows, text="=", bg="#92f0ff", font=("黑体", 20), width=5, height=3, command=lambda: self.count())
        bu_count.grid(padx=5,pady=5, row=5,column=3,rowspan=3)
        bu_0 = Button(Windows, text="0", bg="white", font=("黑体", 20), width=11, height=1, command=lambda: self.calculation("0"))
        bu_0.grid(padx=5,pady=5,row=6,column=0,columnspan=2)
        bu_sum = Button(Windows, text=".", bg="white", font=("黑体", 20), width=5, height=1, justify=LEFT,command=lambda: self.calculation("."))
        bu_sum.grid(padx=5, pady=5, row=6,column=2)

    def clear(self):
        self.equation.set('0')
        self.result.set(' ')

    def back(self):
        calculate = self.equation.get()
        self.equation.set(calculate[:-1])

    def calculation(self, arg):
        calculate = self.equation.get()
        temp_result = self.result.get()
        if temp_result != ' ':
            self.result.set(' ')
        if calculate == '0' and (arg not in ['.', '+', '-', '*', '÷']):
            calculate = ''
        if len(calculate) > 2 and calculate[-1] == '0':
            if (calculate[-2] in ['+', '-', '*', '÷']) and (
                    arg in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']):
                calculate = calculate[:-1]
        calculate = calculate + arg
        self.equation.set(calculate)

    def count(self):
        calculate = self.equation.get()
        calculate = calculate.replace('÷', '/')
        if calculate[0] in ['+', '-', '*', '÷']:
            calculate = '0' + calculate
            print(calculate)
        try:
            answer = '%.4f' % eval(calculate)
            self.result.set(str(answer))
        except (ZeroDivisionError, SyntaxError):
            self.result.set(str('Error'))

if __name__ == "__main__" :
    Windows = Tk()
    Windows.title("简易计算器")
    Windows.resizable(0, 0)
    Windows["background"] = "#f0f0f0"
    app = Application(master = Windows)
    Windows.mainloop()

1、运行计算器代码

同样打开第2章教程中介绍的Pyhint编辑器,在代码框中输入以上计算器代码,点击“运行”按钮就会弹出计算器页面,如下图所示:

2、把计算器代码打包成exe文件

这个计算器软件和我们平时使用的计算器一样,用鼠标点击计算器软件上面的数字和运算符就可以实现计算的功能。为了更加方便的使用计算器,我们同样可以利用Python的PyInstaller组件将计算器软件代码打包成exe文件,打包过程和上一节介绍的俄罗斯方块游戏打包过程一样,打包后的软件如下图所示,打包之前记得先暂时退出360等杀毒软件。