目錄
一、導入 tkinter 庫
定義全局變量
二、定義回調函數
三、創(chuàng)建窗口對象
四、創(chuàng)建標簽控件
五、創(chuàng)建數字按鈕
六、創(chuàng)建加、減、乘、除和等于按鈕
七、創(chuàng)建清空按鈕
八、總結
????????用Python實現計算器可以讓我們更好地理解面向對象編程、GUI 編程和事件驅動編程等概念,并掌握 Python 語言的基本語法和常用庫。同時,計算器是一種常見的應用程序,實現它不僅可以提高我們的編程技能,還可以方便我們平時進行簡單的計算。
????????在編寫計算器程序的過程中,我們需要考慮很多問題,如如何設計 GUI 界面、如何處理用戶輸入、如何進行數值計算等等。這些問題都是實際編寫應用程序時必須面對的,因此通過實現計算器程序,我們可以更好地了解實際軟件開發(fā)中的問題和解決方法。
用Python實現計算器的過程包括以下步驟:
導入所需庫:我們需要使用 tkinter 庫來創(chuàng)建 GUI 界面,并使用 eval 函數來進行數值計算。
創(chuàng)建 GUI 界面:使用 tkinter 庫來創(chuàng)建一個窗口,并在窗口中添加數字按鈕、運算符按鈕和其他功能按鈕,如清除按鈕、等于按鈕等。同時,也需要在界面上創(chuàng)建一個文本框來顯示用戶輸入和計算結果。
處理用戶輸入:通過綁定按鈕事件和鍵盤事件來處理用戶對按鈕的單擊和鍵盤的輸入。當用戶單擊數字按鈕時,將數字添加到文本框中;當用戶單擊運算符按鈕時,將操作符添加到文本框中。同時也需要處理刪除字符和清空文本框等操作。
進行數值計算:當用戶單擊等于按鈕時,使用 eval 函數來計算文本框中的表達式,并將結果顯示在文本框中。
完善程序功能:根據需求可以增加其他功能,如添加小數點、處理錯誤輸入、防止除零等。
一、導入 tkinter 庫
在 Python 中,使用 import
語句可以導入其他模塊或庫。在這個程序中,我們首先需要導入 tkinter 庫,以便創(chuàng)建 GUI 界面。具體的語句如下:
import tkinter as tk
這里我們將 tkinter 庫重命名為 tk
,以便在后面的代碼中更方便地使用。
定義全局變量
在計算器程序中,我們需要保存當前輸入的數字和運算符,以便進行計算。因此,我們在程序一開始就要定義一些變量來保存這些值。具體的變量有 num1
、num2
和 operator
,它們分別表示當前輸入的第一個數字、第二個數字和運算符,初始值均為空字符串。此外,由于這些變量需要在多個函數中使用,因此我們將它們定義為全局變量。具體的語句如下:
# 定義全局變量,用于保存當前輸入的數字和運算符
num1 = ''
num2 = ''
operator = ''
二、定義回調函數
在 GUI 界面中,按鈕、菜單等控件被點擊時會觸發(fā)相應的事件,我們需要編寫回調函數來處理這些事件。在這個程序中,我們需要編寫三個回調函數,分別用于將數字、運算符和等于號添加到顯示屏上,具體的函數如下:
-
add_digit(digit)
:該函數用于將數字添加到顯示屏上。它的參數digit
表示當前點擊的數字,函數會將該數字添加到num1
或num2
變量中,并更新顯示屏的內容。如果當前沒有輸入運算符,則數字會被添加到num1
中;否則,數字會被添加到num2
中。具體的代碼如下:
-
def add_digit(digit): global num1, num2, operator if operator == '': num1 += str(digit) label.config(text=num1) else: num2 += str(digit) label.config(text=num2)
-
add_operator(op)
:該函數用于將運算符添加到顯示屏上。它的參數op
表示當前點擊的運算符。函數會將該運算符添加到operator
變量中,并更新顯示屏的內容。如果num1
不為空,則運算符會被添加到num1
后面;否則,運算符不會被添加到顯示屏上。具體的代碼如下: -
def add_operator(op): global num1, num2, operator if num1 != '' and num2 == '': operator = op label.config(text=num1 + operator)
-
calculate()
:該函數用于計算結果。它會根據當前緩存的數字和運算符計算結果,并更新顯示屏的內容。具體的代碼如下:
-
def calculate(): global num1, num2, operator if num1 != '' and num2 != '' and operator != '': num1 = str(eval(num1 + operator + num2)) num2 = '' operator = '' label.config(text=num1)
在計算過程中,我們使用了 Python 內置的
eval()
函數,該函數可以將字符串作為代碼執(zhí)行,并返回結果。這里我們將緩存的數字和運算符拼接成一個字符串,并將其傳遞給eval()
函數進行計算。
三、創(chuàng)建窗口對象
在 tkinter 中,創(chuàng)建一個窗口對象需要使用 Tk()
構造函數。在這個程序中,我們使用該函數創(chuàng)建了一個名為 window
的窗口對象,并設置了窗口標題為 Calculator
。具體的代碼如下:
# 創(chuàng)建一個名為 window 的窗口對象
window = tk.Tk()
# 設置窗口標題
window.title('Calculator')
四、創(chuàng)建標簽控件
在 tkinter 中,創(chuàng)建一個標簽控件需要使用 Label()
構造函數。在這個程序中,我們使用該函數創(chuàng)建了一個名為 label
的標簽控件,并設置了其字體、寬度、高度、背景色和文本對齊方式等屬性。同時,我們將該標簽控件放置在窗口中央,使用 grid()
方法指定其行列號和邊距等參數。具體的代碼如下:
# 創(chuàng)建一個標簽對象,用于顯示計算結果
label = tk.Label(window, text='0', font=('Arial', 20), width=15, height=2, bg='white', anchor='e')
# 將標簽對象放置在窗口中央
label.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
在這里,row=0
和 column=0
表示該控件位于第 1 行、第 1 列,columnspan=4
表示該控件跨越了 4 列(即占據整個頂部),padx=10
和 pady=10
表示控件邊緣和窗口邊框之間的水平和垂直間距均為 10。
五、創(chuàng)建數字按鈕
在 tkinter 中,創(chuàng)建一個按鈕控件需要使用 Button()
構造函數。在這個程序中,我們使用循環(huán)語句創(chuàng)建了數字按鈕,并設置了其文本、字體、寬度、高度和回調函數等屬性。同時,我們使用 grid()
方法指定了按鈕的行列號和邊距等參數,將其放置在窗口中間。具體的代碼如下:
# 創(chuàng)建數字按鈕并綁定回調函數
for i in range(1, 10):
btn = tk.Button(window, text=str(i), font=('Arial', 20), width=3, height=2, command=lambda digit=i:add_digit(digit))
btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)
在這里,range(1, 10)
表示數字按鈕的取值范圍,循環(huán)變量 i
依次取值 1 到 9。text=str(i)
表示按鈕的文本為當前的數字;font=('Arial', 20)
表示按鈕的字體為 Arial,大小為 20;width=3
和 height=2
表示按鈕的寬度和高度;command=lambda digit=i:add_digit(digit)
表示按鈕被點擊后會調用 add_digit()
函數,并將當前的數字作為參數傳遞給該函數。在 grid()
方法中,row=(i-1)//3+1
和 column=(i-1)%3
表示按鈕的行列號,padx=5
和 pady=5
表示控件邊緣和窗口邊框之間的水平和垂直間距均為 5。
六、創(chuàng)建加、減、乘、除和等于按鈕
在 tkinter 中,創(chuàng)建一個按鈕控件需要使用 Button()
構造函數。在這個程序中,我們使用該函數創(chuàng)建了加、減、乘、除和等于按鈕,并設置了其文本、字體、寬度、高度和回調函數等屬性。同時,我們使用 grid()
方法指定了按鈕的行列號和邊距等參數,將其放置在窗口中間。具體的代碼如下:
# 創(chuàng)建加、減、乘、除、等于按鈕并綁定回調函數
btn_add = tk.Button(window, text='+', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('+'))
btn_sub = tk.Button(window, text='-', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('-'))
btn_mul = tk.Button(window, text='*', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('*'))
btn_div = tk.Button(window, text='/', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('/'))
btn_eq = tk.Button(window, text='=', font=('Arial', 20), width=3, height=2, command=calculate)
# 將按鈕對象放置在窗口中間
btn_add.grid(row=1, column=3, padx=5, pady=5)
btn_sub.grid(row=2, column=3, padx=5, pady=5)
btn_mul.grid(row=3, column=3, padx=5, pady=5)
btn_div.grid(row=4, column=3, padx=5, pady=5)
btn_eq.grid(row=4, column=2, padx=5, pady=5)
在這里,text='+'
、text='-'
、text='*'
和 text='/'
表示加、減、乘、除按鈕的文本,text='='
表示等于按鈕的文本;font=('Arial', 20)
表示按鈕的字體為 Arial,大小為 20;width=3
和 height=2
表示按鈕的寬度和高度;command=lambda:add_operator('+')
、command=lambda:add_operator('-')
、command=lambda:add_operator('*')
和 command=lambda:add_operator('/')
表示分別將加、減、乘、除按鈕的回調函數設置為 add_operator()
函數,并將相應的運算符作為參數傳遞給該函數;command=calculate
表示將等于按鈕的回調函數設置為 calculate()
函數。在 grid()
方法中,row
和 column
表示按鈕的行列號,padx
和 pady
表示控件邊緣和窗口邊框之間的水平和垂直間距。
七、創(chuàng)建清空按鈕
在 tkinter 中,創(chuàng)建一個按鈕控件需要使用 Button()
構造函數。在這個程序中,我們使用該函數創(chuàng)建了一個名為 btn_clear
的清空按鈕,并設置了其文本、字體、寬度、高度和回調函數等屬性。同時,我們使用 grid()
方法指定了按鈕的行列號和邊距等參數,將其放置在窗口底部。具體的代碼如下:
# 創(chuàng)建清空按鈕并綁定回調函數
btn_clear = tk.Button(window, text='C', font=('Arial', 20), width=3, height=2, command=lambda:clear())
btn_clear.grid(row=4, column=0, padx=
八、總結
這個程序使用了 tkinter 庫來創(chuàng)建 GUI 界面。它創(chuàng)建一個名為 window
的窗口,并在窗口中央創(chuàng)建了一個標簽,用于顯示計算結果。然后,它使用循環(huán)語句創(chuàng)建了數字按鈕,并綁定了回調函數add_digit()
,用于將數字添加到顯示屏上;使用按鈕對象創(chuàng)建了加、減、乘、除、等于按鈕,并綁定了回調函數 add_operator()
和 calculate()
,分別用于將運算符添加到顯示屏上和計算結果;最后,在底部創(chuàng)建了一個清空按鈕,并綁定了回調函數 clear()
,用于清空顯示屏和緩存的數字和運算符。
當用戶點擊數字按鈕時,會調用 add_digit()
函數,該函數會將數字添加到 num1
或 num2
變量中,并更新顯示屏的內容。當用戶點擊加、減、乘、除按鈕時,會調用 add_operator()
函數,該函數會將運算符添加到 operator
變量中,并更新顯示屏的內容。當用戶點擊等于按鈕時,會調用 calculate()
函數,該函數會根據當前緩存的數字和運算符計算結果,并更新顯示屏的內容。最后,當用戶點擊清空按鈕時,會調用 clear()
函數,該函數會清空顯示屏和緩存的數字和運算符。文章來源:http://www.zghlxwxcb.cn/news/detail-443732.html
完整代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-443732.html
import tkinter as tk
# 定義全局變量,用于保存當前輸入的數字和運算符
num1 = ''
num2 = ''
operator = ''
# 定義一個函數,用于將數字添加到顯示屏上
def add_digit(digit):
global num1, num2, operator
if operator == '':
num1 += str(digit)
label.config(text=num1)
else:
num2 += str(digit)
label.config(text=num2)
# 定義一個函數,用于將運算符添加到顯示屏上
def add_operator(op):
global num1, num2, operator
if num1 != '' and num2 == '':
operator = op
label.config(text=num1 + operator)
# 定義一個函數,用于計算結果
def calculate():
global num1, num2, operator
if num1 != '' and num2 != '' and operator != '':
num1 = str(eval(num1 + operator + num2))
num2 = ''
operator = ''
label.config(text=num1)
# 創(chuàng)建一個名為 window 的窗口對象
window = tk.Tk()
# 設置窗口標題
window.title('Calculator')
# 創(chuàng)建一個標簽對象,用于顯示計算結果
label = tk.Label(window, text='0', font=('Arial', 20), width=15, height=2, bg='white', anchor='e')
# 將標簽對象放置在窗口中央
label.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
# 創(chuàng)建數字按鈕并綁定回調函數
for i in range(1, 10):
btn = tk.Button(window, text=str(i), font=('Arial', 20), width=3, height=2, command=lambda digit=i:add_digit(digit))
btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)
# 創(chuàng)建加、減、乘、除、等于按鈕并綁定回調函數
btn_add = tk.Button(window, text='+', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('+'))
btn_sub = tk.Button(window, text='-', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('-'))
btn_mul = tk.Button(window, text='*', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('*'))
btn_div = tk.Button(window, text='/', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('/'))
btn_eq = tk.Button(window, text='=', font=('Arial', 20), width=3, height=2, command=calculate)
# 將按鈕對象放置在窗口中間
btn_add.grid(row=1, column=3, padx=5, pady=5)
btn_sub.grid(row=2, column=3, padx=5, pady=5)
btn_mul.grid(row=3, column=3, padx=5, pady=5)
btn_div.grid(row=4, column=3, padx=5, pady=5)
btn_eq.grid(row=4, column=2, padx=5, pady=5)
# 創(chuàng)建清空按鈕并綁定回調函數
btn_clear = tk.Button(window, text='C', font=('Arial', 20), width=3, height=2, command=lambda:clear())
btn_clear.grid(row=4, column=0, padx=5, pady=5)
# 定義一個函數,用于清空顯示屏和緩存的數字和運算符
def clear():
global num1, num2, operator
num1 = ''
num2 = ''
operator = ''
label.config(text='0')
# 進入主消息循環(huán)
window.mainloop()
到了這里,關于Python綜合案例—利用tkinter實現計算器的程序的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!