乐趣区

关于python:用-Python-写个计算器

咱们常见的计算辅助工具有两种,一种是今人创造的算盘,另一种就是咱们现代人创造的计算器,与算盘相比,计算器无论是便利性还是计算速度都是优于算盘的,本文咱们应用 Python 来实现一个繁难的计算器。

实现

咱们简直每个人都用过计算器,大家对于计算器应该都是比拟相熟的,计算器整体也是比较简单的,次要包含:显示器、键盘、运算的逻辑解决等,计算器的图形界面咱们应用 tkinter 库实现,上面看一下具体实现过程。

首先,咱们画一个主窗口,代码实现如下:

# 创立主窗口
tk = tkinter.Tk()
# 设置窗口大小和地位
tk.geometry('300x210+500+200')
# 不容许扭转窗口大小
tk.resizable(False, False)
# 设置窗口题目
tk.title('计算器')

看一下成果:

咱们接着画显示器,代码实现如下:

# 主动刷新字符串变量,可用 set 和 get 办法进行传值和取值
contentVar = tkinter.StringVar(tk, '')
# 创立单行文本框
contentEntry = tkinter.Entry(tk, textvariable=contentVar)
# 设置文本框为只读
contentEntry['state'] = 'readonly'
# 设置文本框坐标及宽高
contentEntry.place(x=20, y=10, width=260, height=30)

看一下成果:

再接着画键盘,代码实现如下:

# 按钮显示内容
bvalue = ['C', '+', '-', '//', '2', '0', '1', '√', '3', '4', '5', '*', '6', '7', '8', '.', '9', '/', '**', '=']
index = 0
# 将按钮进行 5x4 搁置
for row in range(5):
    for col in range(4):
        d = bvalue[index]
        index += 1
        btnDigit = tkinter.Button(tk, text=d, command=lambda x=d: onclick(x))
        btnDigit.place(x=20 + col * 70, y=50 + row * 30, width=50, height=20)

看一下成果:

界面画完了,咱们看一下解决运算逻辑的代码,如下所示:

# 点击事件
def onclick(btn):
    # 运算符
    operation = ('+', '-', '*', '/', '**', '//')
    # 获取文本框中的内容
    content = contentVar.get()
    # 如果已有内容是以小数点结尾的,在后面加 0
    if content.startswith('.'):
        content = '0' + content  # 字符串能够间接用 + 来减少字符
    # 依据不同的按钮作出不同的反馈
    if btn in '0123456789':
        # 按下 0-9 在 content 中追加
        content += btn
    elif btn == '.':
        # 将 content 从 +-*/ 这些字符的中央宰割开来
        lastPart = re.split(r'\+|-|\*|/', content)[-1]
        if '.' in lastPart:
            # 信息提醒对话框
            tkinter.messagebox.showerror('谬误', '反复呈现的小数点')
            return
        else:
            content += btn
    elif btn == 'C':
        # 革除文本框
        content = ''elif btn =='=':
        try:
            # 对输出的表达式求值
            content = str(eval(content))
        except:
            tkinter.messagebox.showerror('谬误', '表达式有误')
            return
    elif btn in operation:
        if content.endswith(operation):
            tkinter.messagebox.showerror('谬误', '不容许存在间断运算符')
            return
        content += btn
    elif btn == '√':
        # 从 . 处宰割存入 n,n 是一个列表
        n = content.split('.')
        # 如果列表中所有的都是数字,就是为了查看表达式是不是正确的
        if all(map(lambda x: x.isdigit(), n)):
            content = eval(content) ** 0.5
        else:
            tkinter.messagebox.showerror('谬误', '表达式谬误')
            return
    # 将结果显示到文本框中
    contentVar.set(content)

整体实现完了之后,咱们来演示一下,看一下成果:

是不是有内味了。

打包

为了更加不便的应用,咱们能够将 Python 代码打包成 exe 文件,打包咱们应用 pyinstaller,装置用 pip install pyinstaller 命令即可。

打包时咱们应用 pyinstaller --onefile --nowindowed counter.py 命令即可,此时打包生成的文件是应用的默认图标,如果咱们想指定本人的图标能够增加参数 --icon="xxx\xxx.ico",打包生成的文件在 dist 目录,如下图所示:

此时,咱们间接运行 exe 文件就行了。

总结

本文咱们应用 Python 实现了一个繁难的计算器,大家如果有趣味的话,能够尝试增加更多的性能以及对键盘进行个性化批改。

源码在公众号 Python 小二 后盾回复 200616 获取。

本文非首发于集体号

退出移动版