python GUI計算器的實(shí)現(xiàn)
01 實(shí)現(xiàn)
我們幾乎每個人都用過計算器,大家對于計算器應(yīng)該都是比較熟悉的,計算器整體也是比較簡單的,主要包括:顯示器、鍵盤、運(yùn)算的邏輯處理等,計算器的圖形界面我們使用 tkinter 庫實(shí)現(xiàn),下面看一下具體實(shí)現(xiàn)過程。
首先,我們畫一個主窗口,代碼實(shí)現(xiàn)如下:
# 創(chuàng)建主窗口tk = tkinter.Tk()# 設(shè)置窗口大小和位置tk.geometry(’300x210+500+200’)# 不允許改變窗口大小tk.resizable(False, False)# 設(shè)置窗口標(biāo)題tk.title(’計算器’)
看一下效果:
我們接著畫顯示器,代碼實(shí)現(xiàn)如下:
# 自動刷新字符串變量,可用 set 和 get 方法進(jìn)行傳值和取值contentVar = tkinter.StringVar(tk, ’’)# 創(chuàng)建單行文本框contentEntry = tkinter.Entry(tk, textvariable=contentVar)# 設(shè)置文本框?yàn)橹蛔xcontentEntry[’state’] = ’readonly’# 設(shè)置文本框坐標(biāo)及寬高contentEntry.place(x=20, y=10, width=260, height=30)
看一下效果:
再接著畫鍵盤,代碼實(shí)現(xiàn)如下:
# 按鈕顯示內(nèi)容bvalue = [’C’, ’+’, ’-’, ’//’, ’2’, ’0’, ’1’, ’√’, ’3’, ’4’, ’5’, ’*’, ’6’, ’7’, ’8’, ’.’, ’9’, ’/’, ’**’, ’=’]index = 0# 將按鈕進(jìn)行 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)
看一下效果:
界面畫完了,我們看一下處理運(yùn)算邏輯的代碼,如下所示:
# 點(diǎn)擊事件def onclick(btn): # 運(yùn)算符 operation = (’+’, ’-’, ’*’, ’/’, ’**’, ’//’) # 獲取文本框中的內(nèi)容 content = contentVar.get() # 如果已有內(nèi)容是以小數(shù)點(diǎn)開頭的,在前面加 0 if content.startswith(’.’): content = ’0’ + content # 字符串可以直接用+來增加字符 # 根據(jù)不同的按鈕作出不同的反應(yīng) if btn in ’0123456789’: # 按下 0-9 在 content 中追加 content += btn elif btn == ’.’: # 將 content 從 +-*/ 這些字符的地方分割開來 lastPart = re.split(r’+|-|*|/’, content)[-1] if ’.’ in lastPart: # 信息提示對話框 tkinter.messagebox.showerror(’錯誤’, ’重復(fù)出現(xiàn)的小數(shù)點(diǎn)’) return else: content += btn elif btn == ’C’: # 清除文本框 content = ’’ elif btn == ’=’: try: # 對輸入的表達(dá)式求值 content = str(eval(content)) except: tkinter.messagebox.showerror(’錯誤’, ’表達(dá)式有誤’) return elif btn in operation: if content.endswith(operation): tkinter.messagebox.showerror(’錯誤’, ’不允許存在連續(xù)運(yùn)算符’) return content += btn elif btn == ’√’: # 從 . 處分割存入 n,n 是一個列表 n = content.split(’.’) # 如果列表中所有的都是數(shù)字,就是為了檢查表達(dá)式是不是正確的 if all(map(lambda x: x.isdigit(), n)): content = eval(content) ** 0.5 else: tkinter.messagebox.showerror(’錯誤’, ’表達(dá)式錯誤’) return # 將結(jié)果顯示到文本框中 contentVar.set(content)
整體實(shí)現(xiàn)完了之后,我們來演示一下,看一下效果:
是不是有內(nèi)味了。
02 打包
為了更加方便的使用,我們可以將 Python 代碼打包成 exe 文件,打包我們使用 pyinstaller,安裝用 pip install pyinstaller 命令即可。
打包時我們使用 pyinstaller --onefile --nowindowed counter.py 命令即可,此時打包生成的文件是使用的默認(rèn)圖標(biāo),如果我們想指定自己的圖標(biāo)可以添加參數(shù) --icon='xxxxxx.ico',打包生成的文件在 dist 目錄。
如下圖所示:
此時,我們直接運(yùn)行 exe 文件就行了。
03 總結(jié)
本文我們使用 Python 實(shí)現(xiàn)了一個簡易的計算器,大家如果有興趣的話,可以嘗試添加更多的功能以及對鍵盤進(jìn)行個性化修改。
以上就是python GUI計算器的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于python 計算器的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. js select支持手動輸入功能實(shí)現(xiàn)代碼2. 如何在PHP中讀寫文件3. java加載屬性配置properties文件的方法4. PHP正則表達(dá)式函數(shù)preg_replace用法實(shí)例分析5. 什么是Python變量作用域6. 《Java程序員修煉之道》作者Ben Evans:保守的設(shè)計思想是Java的最大優(yōu)勢7. CSS3中Transition屬性詳解以及示例分享8. php redis setnx分布式鎖簡單原理解析9. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數(shù)據(jù)的代碼10. vue使用moment如何將時間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時間格式
