溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python如何實現(xiàn)圖形用戶界面計算器

發(fā)布時間:2022-07-22 09:43:12 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Python如何實現(xiàn)圖形用戶界面計算器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python如何實現(xiàn)圖形用戶界面計算器”吧!

Python如何實現(xiàn)圖形用戶界面計算器

簡易用戶圖形界面計算器設(shè)計思路:

簡易圖形用戶界面計算器的界面和功能設(shè)計如下:

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

程序?qū)崿F(xiàn)的基本思維和關(guān)鍵技術(shù)方法如下:

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

(2)實現(xiàn)界面,在Calc構(gòu)造函數(shù),創(chuàng)建簡易圖形用戶界面計算器的各個組件對象·

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

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

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

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

import tkinter as tk
 
class Calculate(tk.Frame):
    def __init__(self, parent):
        """簡易計算器的構(gòu)造函數(shù)"""
        tk.Frame.__init__(self, parent)
        self.pack()
        
        self.startOfNextOperand = True  # 開始輸入下一個操作數(shù)
 
        # 創(chuàng)建計算過程和結(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)
 
        # 計算器按鈕的標(biāo)簽,使用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):
                # 定義事件處理函數(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 == '=':   #按等號鍵時, 求值, 并顯示結(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: # 只有一個字符
                newnum = 0
            else:
                newnum = oldnum[:-1]
            self.result.set(newnum)
        elif key == '±':  # 正負(fù)號,切換正負(fù)號
            oldnum = self.result.get()  # 獲取原來的值
            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()  # 獲取原來的值
            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如何實現(xiàn)圖形用戶界面計算器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI