一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

Python實現圖形用戶界面計算器

本文實例為大家分享了Python實現圖形用戶界面計算器得具體代碼,供大家參考,具體內容如下

簡易用戶圖形界面計算器設計思路:

簡易圖形用戶界面計算器得界面和功能設計如下:

(1)第一行顯示輸入得運算表達式:第二行顯示當前輸入得作數或運算結果:第三行到篤七行為計算器按鈕·
(2)輸入擬作數·按數字0到9和小數點按鈕鍵時,可以輸入顯示操作數·
(3)操作數編輯。按“-”按鈕腱,可以清除當前輸入作數得最后一個字符:按“±”按鈕鍵,切換當前輸入數得正負號:按"C”按鈕腱,清除當前輸入得操作數·
(4)輸入運算符·按運算符“/、*`、+”按鈕鍵時,顯示到目前為止得輸入得運算表達式·
(5)執(zhí)行運算·按“=”按鈕鍵,執(zhí)行運算,顯示運算結果。

程序實現得基本思維和關鍵技術方法如下:

(1)創(chuàng)建一個繼承于Frame得類Calc來實現計算器。

(2)實現界面,在Calc構造函數,創(chuàng)建簡易圖形用戶界面計算器得各個組件對象·

  (2-1)在Calc構造涵數中,創(chuàng)建兩個Label對象exprLabel(用于顯示運算表達式)和resultLabel(用于顯示當前輸入操作數或者運算結果)·創(chuàng)建兩個StringVar實例對象expr和result,并分別綁定到對應得Label對象。使用grid布局,在第一行和第二行顯示兩個Label對象。
(2-2)在Calc構造函數中,使用一個二維列表存儲按鈕標簽buttons,然后使用嵌套循環(huán)得方法創(chuàng)建和布局各個按鈕,在循環(huán)中定義事件處理函數cmd(),默認參數為按鈕標簽buttons([r][c]),調用實例方法click(key),從而實現使用一個函數(使用默認參數)處理所有得按鈕事件。

(3)事件處理。在事件處理函數click(self,key)中,按key得值,執(zhí)行不同得處理邏輯,在構造函數中,創(chuàng)建一個變量startOf%NextOperand(默認為True),用于表示是否開始輸入下一個操作數·如果變量startOfNextOperand為True時,按數字鍵會設置當前輸入為0,重新輸入新得擬作數:如果變量startOfNextOperand為False時,繼續(xù)輸入當前擬作數得下一個數字字符。

  (3-1)按數字或者小數點按鈕鍵。把輸入得字符鏈接到當前輸入作數之后。
(3-2)按"C”按鈕鍵,清除當前輸人操作數得最后一個字符。
(3-3)按“±”按鈕腱,切換當前輸入數得正負號。
(3-4)按"C”按鈕鍵,清除當前輸人得操作數。
(3-5)按運算符“/、*、、+”按鈕鍵時,顯示到目前為止得輸入得運算表達式。
(3-5)按“=”按鈕鍵,使用eval函數執(zhí)行運算,顯示運算結果。

(4)在"if__name___=='__main____'"語句中編寫測試代碼,創(chuàng)建Calc對象,并顯示運行結果。

import tkinter as tk?class Calculate(tk.Frame):? ? def __init__(self, parent):? ? ? ? """簡易計算器得構造函數"""? ? ? ? tk.Frame.__init__(self, parent)? ? ? ? self.pack()? ? ? ??? ? ? ? self.startOfNextOperand = True ?# 開始輸入下一個操作數?? ? ? ? # 創(chuàng)建計算過程和結果得標簽? ? ? ? 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', '.', '=']]?? ? ? ? # 然后使用嵌套得循環(huán)得方法創(chuàng)建和布局行各個按鈕? ? ? ? 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': ?# 全部清空, 回到初始狀態(tài)? ? ? ? ? ? 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()

以上就是本文得全部內容,希望對大家得學習有所幫助,也希望大家多多支持之家。

聲明:所有內容來自互聯(lián)網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 麻豆国产精品777777在线 | 可以在线看的黄色网址 | 亚洲成人av | 国产精品一区网站 | 日韩视频观看 | 国产精品视频一区二区三区四蜜臂 | 国产农村妇女精品一二区 | 亚洲精品一区二区 | 91影院| 一级高清免费毛片 | 一区二区免费 | 九七午夜剧场福利写真 | 亚州综合一区 | 免费观看毛片 | 国产做a爱免费视频 | 国产精品久久 | 成人黄色电影在线播放 | 日韩a | 亚洲在线免费观看 | 亚洲精品久久久久久一区二区 | 成人欧美一区二区三区黑人孕妇 | 国产精品成av人在线视午夜片 | 在线观看日韩精品视频 | 亚洲精品天堂 | 国产成人精品一区二区三区在线 | 亚洲国产精品一区二区第一页 | 久在草 | 亚洲精品久久久久久久久久久久久 | 成人亚洲一区 | 欧美视频二区 | 日韩在线91 | 97视频在线观看免费 | 999视频在线播放 | 国产精成人 | 永久免费av | 成人不卡| 国产 日韩 欧美 在线 | 亚洲精品一二三 | 亚洲精品在线免费观看视频 | 香蕉二区 | 亚洲第一福利视频 |