用 Python 寫個計算器

咱們常見的計算輔助工具備兩種,一種是古人發明的算盤,另外一種就是咱們現代人發明的計算器,與算盤相比,計算器不管是便利性仍是計算速度都是優於算盤的,本文咱們使用 Python 來實現一個簡易的計算器。python

實現

咱們幾乎每一個人都用過計算器,你們對於計算器應該都是比較熟悉的,計算器總體也是比較簡單的,主要包括:顯示器、鍵盤、運算的邏輯處理等,計算器的圖形界面咱們使用 tkinter 庫實現,下面看一下具體實現過程。git

首先,咱們畫一個主窗口,代碼實現以下:工具

# 建立主窗口
tk = tkinter.Tk()
# 設置窗口大小和位置
tk.geometry('300x210+500+200')
# 不容許改變窗口大小
tk.resizable(False, False)
# 設置窗口標題
tk.title('計算器')

看一下效果:spa

咱們接着畫顯示器,代碼實現以下:3d

# 自動刷新字符串變量,可用 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)

看一下效果:code

再接着畫鍵盤,代碼實現以下:blog

# 按鈕顯示內容
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)

看一下效果:事件

界面畫完了,咱們看一下處理運算邏輯的代碼,以下所示:ip

# 點擊事件
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)

總體實現完了以後,咱們來演示一下,看一下效果:rem

是否是有內味了。

打包

爲了更加方便的使用,咱們能夠將 Python 代碼打包成 exe 文件,打包咱們使用 pyinstaller,安裝用 pip install pyinstaller 命令便可。

打包時咱們使用 pyinstaller --onefile --nowindowed counter.py 命令便可,此時打包生成的文件是使用的默認圖標,若是咱們想指定本身的圖標能夠添加參數 --icon="xxx\xxx.ico",打包生成的文件在 dist 目錄,以下圖所示:

此時,咱們直接運行 exe 文件就好了。

總結

本文咱們使用 Python 實現了一個簡易的計算器,你們若是有興趣的話,能夠嘗試添加更多的功能以及對鍵盤進行個性化修改。

源碼在公衆號 Python小二 後臺回覆 200616 獲取。

本文非首發於我的號
相關文章
相關標籤/搜索