用十種編程語言開發(fā)計算器應(yīng)用
- C語言
- C#(windows桌面軟件)
- Swift (ios應(yīng)用)
- python
- Dart(Flutter應(yīng)用谷炸,跨平臺北专,適用安卓、ios旬陡、mac拓颓、windows、web)
- Java(安卓App)
- Kotlin (安卓App)
- Js+Html+Vue(H5應(yīng)用)
- 微信小程序
- 抖音小程序
image
Python語言版
請?zhí)砑訄D片描述
開發(fā)工具
Pycharm
image
工程截圖
image
關(guān)鍵代碼文件
- calculator.py 繪制計算器界面及邏輯處理程序
import tkinter as tk
def printout(result1, result2, frm):
label1 = tk.Label(frm, font=('微軟雅黑', 20), bg='#0a0a0a', bd='9', fg='#ffffff', anchor='se', textvariable=result1)
label1.place(relx=1, rely=0.5, relwidth=1, relheight=0.5, anchor='se')
label2 = tk.Label(frm, font=('微軟雅黑', 20), bg='#0a0a0a', bd='9', fg='#ffffff', anchor='se', textvariable=result2)
label2.place(relx=1, rely=1, relwidth=1, relheight=0.5, anchor='se')
def layout(root, result1, result2):
frm1 = tk.Frame(root)
frm1.config(width=320, height=100, relief='solid')
printout(result1, result2, frm1)
frm1.grid(row=0, column=0)
frm1.grid_propagate(0)
frm1.update()
frm2 = tk.Frame(root)
frm2.config(width=320, height=400, bg='#dfe9f4', relief='solid')
layout_button(frm2)
frm2.grid(row=1, column=0)
frm2.grid_propagate(0)
def layout_button(frm):
btn7 = tk.Button(frm, text='7', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('7'))
btn7.place(relx=0.125, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
btn8 = tk.Button(frm, text='8', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('8'))
btn8.place(relx=0.375, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
btn9 = tk.Button(frm, text='9', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('9'))
btn9.place(relx=0.625, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
btn4 = tk.Button(frm, text='4', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('4'))
btn4.place(relx=0.125, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
btn5 = tk.Button(frm, text='5', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('5'))
btn5.place(relx=0.375, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
btn6 = tk.Button(frm, text='6', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('6'))
btn6.place(relx=0.625, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
btn1 = tk.Button(frm, text='1', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('1'))
btn1.place(relx=0.125, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
btn2 = tk.Button(frm, text='2', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('2'))
btn2.place(relx=0.375, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
btn3 = tk.Button(frm, text='3', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('3'))
btn3.place(relx=0.625, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
btn10 = tk.Button(frm, text='0', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('0'))
btn10.place(relx=0.125, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')
btn11 = tk.Button(frm, text='.', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('.'))
btn11.place(relx=0.375, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')
btn12 = tk.Button(frm, text='=', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_equal())
btn12.place(relx=0.625, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')
btn13 = tk.Button(frm, text='+', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('+'))
btn13.place(relx=0.875, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
btn13 = tk.Button(frm, text='-', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('-'))
btn13.place(relx=0.875, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
btn13 = tk.Button(frm, text='X', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('*'))
btn13.place(relx=0.875, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
btn13 = tk.Button(frm, text='÷', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('/'))
btn13.place(relx=0.875, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')
def press_num(num):
global isintbtn # 標(biāo)記按鈕按的數(shù)字描孟,默認(rèn)未按
global isstrbtn # 標(biāo)記按鈕按的符號驶睦,默認(rèn)未按
global is_equal_last # 標(biāo)記上一個按鍵
global last_num # 記錄上一個數(shù)字
global list
if isstrbtn == False:
pass
else:
result2.set(0)
isstrbtn = False # 若上次按鍵為符號砰左,數(shù)字重新清零開始計數(shù)
if is_equal_last == True:
result2.set(0) # 等號同理
oldnum = result2.get()
if oldnum == '0':
result2.set(num)
last_num = num
else:
newnum = oldnum + num
result2.set(newnum)
last_num = newnum # 連續(xù)按數(shù)字,將數(shù)字連起來作為新的數(shù)字
is_equal_last = False # 標(biāo)記下上個按鍵已不是等號
def press_compute(sign):
global isintbtn
global isstrbtn
global is_equal_last
global last_cpt
global list
num = result2.get()
list.append(num) # 把數(shù)字記錄到列表中
list.append(sign)
isstrbtn = True # 把符號記錄到列表中
is_equal_last = False
last_cpt = sign
cur_out = ''.join(list)
result1.set(cur_out) # 上部分顯示板顯示之前輸入的數(shù)字
def press_equal():
global isintbtn
global isstrbtn
global is_equal_last
global last_num
global list
if is_equal_last == False:
curnum = result2.get()
list.append(curnum)
computeStr = ''.join(list)
endnum = eval(computeStr) # 使用eval函數(shù)將list內(nèi)容計算出結(jié)果
result2.set(endnum)
result1.set(computeStr) # 將計算結(jié)果和內(nèi)容顯示在顯示板上
is_equal_last = True # 標(biāo)記此時最后一個按鍵是等號
list.clear() # 清空list
else:
curnum = result2.get() # 如果上次按鍵是等號场航,記錄上次的計算結(jié)果
list.append(curnum)
list.append(last_cpt)
list.append(str(last_num)) # 將計算結(jié)果缠导、最后一次的符號、最后一個數(shù)字添加到list中
# print(list)
computeStr = ''.join(list)
endnum = eval(computeStr)
# print(computeStr)
result2.set(endnum)
result1.set(computeStr)
is_equal_last = True
list.clear() # 按照新的list計算結(jié)果并顯示
root = tk.Tk()
root.title("計算器-花生皮編程")
root['bg'] = '#181818'
root.geometry("320x500")
isintbtn = False # 確認(rèn)是否按下了計算符旗闽,默認(rèn)為未按下
isstrbtn = False
is_equal_last = False # 確認(rèn)上一個按鍵是不是等號,便于處理連續(xù)按了等號的情況
last_num = [] # 上一個數(shù)字保存
last_cpt = '' # 上一個計算符號保存蜜另,便與處理如果連續(xù)按了等號的情況
list = [] # 保存按下的數(shù)據(jù)和字符适室,一是用于最終結(jié)果計算,而是現(xiàn)實(shí)在上面現(xiàn)實(shí)板上
result1 = tk.StringVar()
result1.set('') # 上面顯示板举瑰,默認(rèn)顯示空
result2 = tk.StringVar()
result2.set(0) # 下面顯示板捣辆,默認(rèn)顯示0
layout(root, result1, result2)
root.mainloop()
完整源代碼
https://gitee.com/hspbc/calculators
image
系列文章
用十種編程語言開發(fā)計算器應(yīng)用-第一篇-C語言
用十種編程語言開發(fā)計算器應(yīng)用-第二篇-Java
用十種編程語言開發(fā)計算器應(yīng)用-第三篇-Python
用十種編程語言開發(fā)計算器應(yīng)用-第四篇-Kotlin
用十種編程語言開發(fā)計算器應(yīng)用-第五篇-Flutter
用十種編程語言開發(fā)計算器應(yīng)用-第六篇-iOS
用十種編程語言開發(fā)計算器應(yīng)用-第七篇-h5(Js+Html+Vue)
用十種編程語言開發(fā)計算器應(yīng)用-第八篇-微信小程序
用十種編程語言開發(fā)計算器應(yīng)用-第九篇-抖音小程序
用十種編程語言開發(fā)計算器應(yīng)用-第十篇-C#(Windows桌面軟件)
關(guān)于我
廈門大學(xué)計算機(jī)專業(yè)|華為八年高級工程師
十年軟件開發(fā)經(jīng)驗(yàn),5年編程培訓(xùn)教學(xué)經(jīng)驗(yàn)
目前從事編程教學(xué)此迅,軟件開發(fā)指導(dǎo)汽畴,軟件類畢業(yè)設(shè)計指導(dǎo)。
所有編程資料及開源項(xiàng)目見https://cxyxy.blog.csdn.net/article/details/120405881