您好,登錄后才能下訂單哦!
本篇內容主要講解“Python如何實現圖形用戶界面計算器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何實現圖形用戶界面計算器”吧!
簡易用戶圖形界面計算器設計思路:
簡易圖形用戶界面計算器的界面和功能設計如下:
(1)第一行顯示輸入的運算表達式:第二行顯示當前輸入的作數或運算結果:第三行到篤七行為計算器按鈕·
(2)輸入擬作數·按數字0到9和小數點按鈕鍵時,可以輸入顯示操作數·
(3)操作數編輯。按“-”按鈕腱,可以清除當前輸入作數的最后一個字符:按“±”按鈕鍵,切換當前輸入數的正負號:按"C”按鈕腱,清除當前輸入的操作數·
(4)輸入運算符·按運算符“/、*`、+”按鈕鍵時,顯示到目前為止的輸入的運算表達式·
(5)執行運算·按“=”按鈕鍵,執行運算,顯示運算結果。
程序實現的基本思維和關鍵技術方法如下:
(1)創建一個繼承于Frame的類Calc來實現計算器。
(2)實現界面,在Calc構造函數,創建簡易圖形用戶界面計算器的各個組件對象·
(2-1)在Calc構造涵數中,創建兩個Label對象exprLabel(用于顯示運算表達式)和resultLabel(用于顯示當前輸入操作數或者運算結果)·創建兩個StringVar實例對象expr和result,并分別綁定到對應得Label對象。使用grid布局,在第一行和第二行顯示兩個Label對象。
(2-2)在Calc構造函數中,使用一個二維列表存儲按鈕標簽buttons,然后使用嵌套循環的方法創建和布局各個按鈕,在循環中定義事件處理函數cmd(),默認參數為按鈕標簽buttons([r][c]),調用實例方法click(key),從而實現使用一個函數(使用默認參數)處理所有的按鈕事件。
(3)事件處理。在事件處理函數click(self,key)中,按key的值,執行不同的處理邏輯,在構造函數中,創建一個變量startOf%NextOperand(默認為True),用于表示是否開始輸入下一個操作數·如果變量startOfNextOperand為True時,按數字鍵會設置當前輸入為0,重新輸入新的擬作數:如果變量startOfNextOperand為False時,繼續輸入當前擬作數的下一個數字字符。
(3-1)按數字或者小數點按鈕鍵。把輸入的字符鏈接到當前輸入作數之后。
(3-2)按"C”按鈕鍵,清除當前輸人操作數的最后一個字符。
(3-3)按“±”按鈕腱,切換當前輸入數的正負號。
(3-4)按"C”按鈕鍵,清除當前輸人的操作數。
(3-5)按運算符“/、*、、+”按鈕鍵時,顯示到目前為止的輸入的運算表達式。
(3-5)按“=”按鈕鍵,使用eval函數執行運算,顯示運算結果。
(4)在"if__name___=='__main____'"語句中編寫測試代碼,創建Calc對象,并顯示運行結果。
import tkinter as tk class Calculate(tk.Frame): def __init__(self, parent): """簡易計算器的構造函數""" tk.Frame.__init__(self, parent) self.pack() self.startOfNextOperand = True # 開始輸入下一個操作數 # 創建計算過程和結果的標簽 self.expr = tk.StringVar() #顯示運算表達式 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() # 顯示結果 self.result.set(0) #結果初始為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) # 計算器按鈕的標簽,使用2D列表表示 buttons = [[ 'CE', 'C', '←', '/'], ['7', '8', '9', '×'], ['4', '5', '6', '-'], ['1', '2', '3', '+'], ['±', '0', '.', '=']] # 然后使用嵌套的循環的方法創建和布局行各個按鈕 for r in range(5): for c in range(4): # 定義事件處理函數cmd(),默認參數為按鈕標簽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)#前兩行顯示結果 按鈕從第三行開始 def click(self, key): """事件處理函數""" if key == '=': #按等號鍵時, 求值, 并顯示結果 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': # 全部清空, 回到初始狀態 self.expr.set('') self.result.set(0) elif key == 'CE': # 清空當前輸入 self.result.set(0) elif key == '←': oldnum = self.result.get() if len(oldnum) == 1: # 只有一個字符 newnum = 0 else: newnum = oldnum[:-1] self.result.set(newnum) elif key == '±': # 正負號,切換正負號 oldnum = self.result.get() # 獲取原來的值 if oldnum[0] == '-': newnum = oldnum[1:] else: newnum = '-' + oldnum self.result.set(newnum) else: # 按數字或者小數點鍵 if self.startOfNextOperand: self.result.set(0) self.startOfNextOperand = False oldnum = self.result.get() # 獲取原來的值 if oldnum == '0': self.result.set(key) else: newnum = oldnum + key self.result.set(newnum) if __name__ == '__main__': root = tk.Tk() root.title('簡易計算器') calculate = Calculate(root) root.mainloop()
到此,相信大家對“Python如何實現圖形用戶界面計算器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。