Python實(shí)現(xiàn)圖形用戶界面計(jì)算器
本文實(shí)例為大家分享了Python實(shí)現(xiàn)圖形用戶界面計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下
簡(jiǎn)易用戶圖形界面計(jì)算器設(shè)計(jì)思路:
簡(jiǎn)易圖形用戶界面計(jì)算器的界面和功能設(shè)計(jì)如下:
(1)第一行顯示輸入的運(yùn)算表達(dá)式:第二行顯示當(dāng)前輸入的作數(shù)或運(yùn)算結(jié)果:第三行到篤七行為計(jì)算器按鈕·
(2)輸入擬作數(shù)·按數(shù)字0到9和小數(shù)點(diǎn)按鈕鍵時(shí),可以輸入顯示操作數(shù)·
(3)操作數(shù)編輯。按“-”按鈕腱,可以清除當(dāng)前輸入作數(shù)的最后一個(gè)字符:按“±”按鈕鍵,切換當(dāng)前輸入數(shù)的正負(fù)號(hào):按"C”按鈕腱,清除當(dāng)前輸入的操作數(shù)·
(4)輸入運(yùn)算符·按運(yùn)算符“/、*`、+”按鈕鍵時(shí),顯示到目前為止的輸入的運(yùn)算表達(dá)式·
(5)執(zhí)行運(yùn)算·按“=”按鈕鍵,執(zhí)行運(yùn)算,顯示運(yùn)算結(jié)果。
程序?qū)崿F(xiàn)的基本思維和關(guān)鍵技術(shù)方法如下:
(1)創(chuàng)建一個(gè)繼承于Frame的類Calc來(lái)實(shí)現(xiàn)計(jì)算器。
(2)實(shí)現(xiàn)界面,在Calc構(gòu)造函數(shù),創(chuàng)建簡(jiǎn)易圖形用戶界面計(jì)算器的各個(gè)組件對(duì)象·
(2-1)在Calc構(gòu)造涵數(shù)中,創(chuàng)建兩個(gè)Label對(duì)象exprLabel(用于顯示運(yùn)算表達(dá)式)和resultLabel(用于顯示當(dāng)前輸入操作數(shù)或者運(yùn)算結(jié)果)·創(chuàng)建兩個(gè)StringVar實(shí)例對(duì)象expr和result,并分別綁定到對(duì)應(yīng)得Label對(duì)象。使用grid布局,在第一行和第二行顯示兩個(gè)Label對(duì)象。
(2-2)在Calc構(gòu)造函數(shù)中,使用一個(gè)二維列表存儲(chǔ)按鈕標(biāo)簽buttons,然后使用嵌套循環(huán)的方法創(chuàng)建和布局各個(gè)按鈕,在循環(huán)中定義事件處理函數(shù)cmd(),默認(rèn)參數(shù)為按鈕標(biāo)簽buttons([r][c]),調(diào)用實(shí)例方法click(key),從而實(shí)現(xiàn)使用一個(gè)函數(shù)(使用默認(rèn)參數(shù))處理所有的按鈕事件。
(3)事件處理。在事件處理函數(shù)click(self,key)中,按key的值,執(zhí)行不同的處理邏輯,在構(gòu)造函數(shù)中,創(chuàng)建一個(gè)變量startOf%NextOperand(默認(rèn)為True),用于表示是否開始輸入下一個(gè)操作數(shù)·如果變量startOfNextOperand為True時(shí),按數(shù)字鍵會(huì)設(shè)置當(dāng)前輸入為0,重新輸入新的擬作數(shù):如果變量startOfNextOperand為False時(shí),繼續(xù)輸入當(dāng)前擬作數(shù)的下一個(gè)數(shù)字字符。
(3-1)按數(shù)字或者小數(shù)點(diǎn)按鈕鍵。把輸入的字符鏈接到當(dāng)前輸入作數(shù)之后。
(3-2)按"C”按鈕鍵,清除當(dāng)前輸人操作數(shù)的最后一個(gè)字符。
(3-3)按“±”按鈕腱,切換當(dāng)前輸入數(shù)的正負(fù)號(hào)。
(3-4)按"C”按鈕鍵,清除當(dāng)前輸人的操作數(shù)。
(3-5)按運(yùn)算符“/、*、、+”按鈕鍵時(shí),顯示到目前為止的輸入的運(yùn)算表達(dá)式。
(3-5)按“=”按鈕鍵,使用eval函數(shù)執(zhí)行運(yùn)算,顯示運(yùn)算結(jié)果。
(4)在"if__name___=='__main____'"語(yǔ)句中編寫測(cè)試代碼,創(chuàng)建Calc對(duì)象,并顯示運(yùn)行結(jié)果。
import tkinter as tk ? class Calculate(tk.Frame): ? ? def __init__(self, parent): ? ? ? ? """簡(jiǎn)易計(jì)算器的構(gòu)造函數(shù)""" ? ? ? ? tk.Frame.__init__(self, parent) ? ? ? ? self.pack() ? ? ? ?? ? ? ? ? self.startOfNextOperand = True ?# 開始輸入下一個(gè)操作數(shù) ? ? ? ? ? # 創(chuàng)建計(jì)算過(guò)程和結(jié)果的標(biāo)簽 ? ? ? ? self.expr = tk.StringVar() ?#顯示運(yùn)算表達(dá)式 ? ? ? ? self.expr.set('') ? ? ? ? self.exprLabel = tk.Label(self, font = ('Helvetica', 10), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fg = '#828282', width = 32, anchor='e', textvariable = self.expr) ? ? ? ? self.exprLabel.grid(row = 0, column = 0, columnspan = 4) ? ? ? ? self.result = tk.StringVar() ? ? ?# 顯示結(jié)果 ? ? ? ? self.result.set(0) ?#結(jié)果初始為0 ? ? ? ? self.resultLabel = tk.Label(self, font = ('Helvetica', 20), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width = 16, anchor='e', textvariable=self.result) ? ? ? ? self.resultLabel.grid(row = 1, column = 0, columnspan = 4) ? ? ? ? ? # 計(jì)算器按鈕的標(biāo)簽,使用2D列表表示 ? ? ? ? buttons = [[ 'CE', 'C', '←', '/'], ? ? ? ? ? ? ? ? ? ?['7', '8', '9', '×'], ? ? ? ? ? ? ? ? ? ?['4', '5', '6', '-'], ? ? ? ? ? ? ? ? ? ?['1', '2', '3', '+'], ? ? ? ? ? ? ? ? ? ?['±', '0', '.', '=']] ? ? ? ? ? # 然后使用嵌套的循環(huán)的方法創(chuàng)建和布局行各個(gè)按鈕 ? ? ? ? for r in range(5): ? ? ? ? ? ? for c in range(4): ? ? ? ? ? ? ? ? # 定義事件處理函數(shù)cmd(),默認(rèn)參數(shù)為按鈕標(biāo)簽buttons[r][c] ? ? ? ? ? ? ? ? def cmd(key = buttons[r][c]): ? ? ? ? ? ? ? ? ? ? self.click(key) ? ? ? ? ? ? ? ? b = tk.Button(self, text = buttons[r][c], width=8,command = cmd) ? ? ? ? ? ? ? ? b.grid(row = r+2, column = c)#前兩行顯示結(jié)果 按鈕從第三行開始 ? ? ? ? ? ? ? ?? ? ? def click(self, key): ? ? ? ? """事件處理函數(shù)""" ? ? ? ? if key == '=': ? #按等號(hào)鍵時(shí), 求值, 并顯示結(jié)果 ? ? ? ? ? ? result = eval(self.expr.get() + self.result.get()) ? ? ? ? ? ? self.result.set(result) ? ? ? ? ? ? self.expr.set('') ? ? ? ? ? ? self.startOfNextOperand = True ? ? ? ? elif key in '+-/×': ? ? ? ? ? ? if key == '×': key = '*' ? ? ? ? ? ? resultExpr = self.expr.get() + self.result.get() + key ? ? ? ? ? ? self.expr.set(resultExpr) ? ? ? ? ? ? self.result.set(0) ? ? ? ? ? ? self.startOfNextOperand = True ? ? ? ? elif key == 'C': ?# 全部清空, 回到初始狀態(tài) ? ? ? ? ? ? self.expr.set('') ? ? ? ? ? ? self.result.set(0) ? ? ? ? elif key == 'CE': ?# 清空當(dāng)前輸入 ? ? ? ? ? ? self.result.set(0) ? ? ? ? elif key == '←': ? ? ? ? ? ? oldnum = self.result.get() ? ? ? ? ? ? if len(oldnum) == 1: # 只有一個(gè)字符 ? ? ? ? ? ? ? ? newnum = 0 ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? newnum = oldnum[:-1] ? ? ? ? ? ? self.result.set(newnum) ? ? ? ? elif key == '±': ?# 正負(fù)號(hào),切換正負(fù)號(hào) ? ? ? ? ? ? oldnum = self.result.get() ?# 獲取原來(lái)的值 ? ? ? ? ? ? if oldnum[0] == '-': ? ? ? ? ? ? ? ? newnum = oldnum[1:] ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? newnum = '-' + oldnum ? ? ? ? ? ? self.result.set(newnum) ? ? ? ? else: # 按數(shù)字或者小數(shù)點(diǎn)鍵 ? ? ? ? ? ? if self.startOfNextOperand: ? ? ? ? ? ? ? ? self.result.set(0) ? ? ? ? ? ? ? ? self.startOfNextOperand = False ? ? ? ? ? ? oldnum = self.result.get() ?# 獲取原來(lái)的值 ? ? ? ? ? ? if oldnum == '0': ? ? ? ? ? ? ? ? self.result.set(key) ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? newnum = oldnum + key ? ? ? ? ? ? ? ? self.result.set(newnum) ? if __name__ == '__main__': ? ? root = tk.Tk() ? ? root.title('簡(jiǎn)易計(jì)算器') ? ? calculate = Calculate(root) ? ? root.mainloop()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)簡(jiǎn)易版計(jì)算器
- Python實(shí)現(xiàn)簡(jiǎn)單的四則運(yùn)算計(jì)算器
- python 簡(jiǎn)易計(jì)算器程序,代碼就幾行
- 利用Tkinter(python3.6)實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
- 基于python的Tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器
- Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例
- 僅用50行代碼實(shí)現(xiàn)一個(gè)Python編寫的計(jì)算器的教程
- Python只用40行代碼編寫的計(jì)算器實(shí)例
- Python實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能詳解
- Python PyQt5實(shí)現(xiàn)的簡(jiǎn)易計(jì)算器功能示例
相關(guān)文章
Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的遞歸下降分析器
這篇文章主要介紹了Python如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的遞歸下降分析器,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08Python中的標(biāo)簽編碼和獨(dú)熱編碼示例詳解
標(biāo)簽編碼是一種用于將分類列轉(zhuǎn)換為數(shù)值列的技術(shù),以便它們可以通過(guò)僅采用數(shù)值數(shù)據(jù)的機(jī)器學(xué)習(xí)模型進(jìn)行擬合,這篇文章主要介紹了Python中的標(biāo)簽編碼和獨(dú)熱編碼,需要的朋友可以參考下2023-07-07Pytorch中Softmax與LogSigmoid的對(duì)比分析
這篇文章主要介紹了Pytorch中Softmax與LogSigmoid的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06python實(shí)現(xiàn)提取百度搜索結(jié)果的方法
這篇文章主要介紹了python實(shí)現(xiàn)提取百度搜索結(jié)果的方法,涉及Python網(wǎng)頁(yè)及字符串操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05Python字典取值全攻略之高效、簡(jiǎn)潔地獲取字典值的多種技巧
這篇文章主要給大家介紹了關(guān)于Python字典取值全攻略之高效、簡(jiǎn)潔地獲取字典值的多種技巧,dictionary(字典)是除列表以外Python之中最靈活的數(shù)據(jù)類型,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12用Python將Excel數(shù)據(jù)導(dǎo)入到SQL Server的例子
今天小編就為大家分享一篇用Python將Excel數(shù)據(jù)導(dǎo)入到SQL Server的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08