电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python GUI模擬實現(xiàn)計算器

瀏覽:92日期:2022-07-19 18:49:23

python編寫計算器,供大家參考,具體內(nèi)容如下

(1)計算器界面如下:

python GUI模擬實現(xiàn)計算器

(2)基本滿足了計算器的所有需求,使用時不可鍵盤輸入,只能鼠標(biāo)點擊左鍵才可執(zhí)行。初始時顯示0.0,每次輸入的內(nèi)容存于D:num.txt(啟動程序時自動創(chuàng)建)

(3)' AC ' 記錄清零返回初始 0.0;' delete ' 刪除上一個輸入內(nèi)容;' +/- ' 將正數(shù)為負(fù)數(shù),負(fù)數(shù)為正數(shù)

(4)對于不同的進(jìn)制數(shù)值系統(tǒng),小數(shù)的精準(zhǔn)值不同。因此計算機(jī)會出現(xiàn) 0.1+0.2=0.3000000000004 的現(xiàn)象能對數(shù)據(jù)進(jìn)行截斷處理,可以解決問題,但精度喪失。(此計算機(jī)沒有進(jìn)行截斷處理)

import tkinter,osfrom tkinter import *def temp(string):#空白間隔 temp=tkinter.Frame(string,width=20,height=50) temp.pack()flag=0node=0def num_work(): #更新顯示框Lable global flag global node with open('D:num.txt') as f: for length in f: string=length top_work.configure(text=string.strip(’n’)) # 重新設(shè)置標(biāo)簽文本 root.after(500,num_work) # 每隔0.5s調(diào)用函數(shù)num_work自身獲取結(jié)果def num_math_int(num1,num2):#整數(shù)運算 try: if num2[0]==’+’: string=int(num1)+int(num2[1:]) elif num2[0]==’-’: string=int(num1)-int(num2[1:]) elif num2[0]==’x’: string=int(num1)*int(num2[1:]) elif num2[0]==’/’: string=int(num1)/int(num2[1:]) with open('D:num.txt',’a’) as f: f.write(’n’+str(string)+’n’) except: with open('D:num.txt',’a’) as f:f.write(’n錯誤’)def num_math_float(num1,num2):#小數(shù)運算 try: if num2[0]==’+’: string=float(num1)+float(num2[1:]) elif num2[0]==’-’: string=float(num1)-float(num2[1:]) elif num2[0]==’x’: string=float(num1)*float(num2[1:]) elif num2[0]==’/’: string=float(num1)/float(num2[1:]) if flag==0: with open('D:num.txt',’a’) as f:f.write(’n’+str(string)+’n’) else: with open('D:num.txt',’a’) as f:f.write(’n’+str(string)) except: with open('D:num.txt',’a’) as f:f.write(’n錯誤’)def decimal(num): if num.count(’%’)>0: num=num.replace(’%’,’’) num=num.replace(’n’,’’) if num.isnumeric(): num=str(float(num)/100) else: num=num[0]+str(float(num[1:])/100) return num def work(string):#按鍵對應(yīng)的功能 if string.isnumeric(): with open('D:num.txt','a') as file: file.write(string) else: #讀取文件D:num.txt所有內(nèi)容 lists=[] with open('D:num.txt','r') as file: for length in file:lists.append(length) if string==’AC’: with open('D:num.txt','w') as file:file.write(’0.0n’) elif string==’=’: num1=lists[-2] num2=lists[-1] if num1==’n’:#解決末尾為換行的情況num1=lists[-3] #將百分?jǐn)?shù)小數(shù)化 #出現(xiàn)結(jié)果多0.0000000001 num1=decimal(num1) num2=decimal(num2) try: #判斷兩個數(shù)是整數(shù)還是小數(shù)number=int(num1)number=int(num2[1:])num_math_int(num1,num2)#兩個數(shù)進(jìn)行整數(shù)運算 except:num_math_float(num1,num2)#兩個數(shù)進(jìn)行小數(shù)運算 elif string==’.’: if lists[-1].count(’.’)==0:#判斷結(jié)尾是否有小數(shù)點,沒有寫入否則報錯with open('D:num.txt','a') as file: file.write(string) else:with open('D:num.txt','a') as file: file.write(’n錯誤’) elif string==’+/-’: if lists[-1].count(’-’)==0:#-+為-if lists[-1].count(’+’)==1: lists[-1]=lists[-1].replace(’+’,’’)lists[-1]=’-’+lists[-1] else: #--為+lists[-1]=lists[-1].replace(’-’,’+’) #更新文件 with open('D:num.txt','w') as file:pass for length in lists:with open('D:num.txt','a') as file: file.write(length) elif string==’delete’: number=lists[-1] lists[-1]=number[0:(len(number)-1)]#刪除一位 #更新文件 with open('D:num.txt','w') as file:pass for length in lists:with open('D:num.txt','a') as file: file.write(length) elif string==’%’: if lists[-1].endswith('%')==False:with open('D:num.txt','a') as file: file.write(string) else:with open('D:num.txt','a') as file: file.write(’n錯誤’) else: with open('D:num.txt','a') as file:file.write(’n’+string) def run():#計算器顯示界面主體 if os.path.exists('D:num.txt')==False: with open('D:num.txt',’w’) as f: f.write(’0.0n’)global root#定義全局變量root,方便Label更新 root=tkinter.Tk() root.title('計算器') #x = root.winfo_screenwidth() #獲取當(dāng)前屏幕的寬 #y = root.winfo_screenheight() #獲取當(dāng)前屏幕的高 #print(((x-500)//2),((y-600)//2))#為居中提供的參數(shù) root.geometry(’400x500+760+290’)#主體長400,高500,居中 top=tkinter.Frame(root,width=20,height=50) top.pack() global top_work#定義全局變量root temp(top)#空白間隔 #計算器顯示框 top_work=tkinter.Label(top,text=’’,justify=’left’,relief=SUNKEN,bd=10,bg=’white’,width=40) top_work.pack(side=’bottom’)#計算器顯示框(位置居下) num_work() temp(root)#空白間隔 number=tkinter.Frame(root)#成放計算機(jī)鍵盤的容器 number.pack() #所有按鍵,AC鍵為事例 numberAC=tkinter.Button(number,text='AC',width=10,command=lambda : work(’AC’)).grid(row=0,column=0) #左鍵點擊,執(zhí)行函數(shù)work #按鍵位置(0,0) numberdelete=tkinter.Button(number,text='delete',width=10,command=lambda : work(’delete’)).grid(row=0,column=1) numberzhengfu=tkinter.Button(number,text='+/-',width=10,command=lambda : work(’+/-’)).grid(row=0,column=2) numberchu=tkinter.Button(number,text='/',width=10,command=lambda : work(’/’)).grid(row=0,column=3) tkinter.Button(number,text='7',width=10,command=lambda : work(’7’)).grid(row=1,column=0) tkinter.Button(number,text='8',width=10,command=lambda : work(’8’)).grid(row=1,column=1) tkinter.Button(number,text='9',width=10,command=lambda : work(’9’)).grid(row=1,column=2) tkinter.Button(number,text='x',width=10,command=lambda : work(’x’)).grid(row=1,column=3) tkinter.Button(number,text='4',width=10,command=lambda : work(’4’)).grid(row=2,column=0) tkinter.Button(number,text='5',width=10,command=lambda : work(’5’)).grid(row=2,column=1) tkinter.Button(number,text='6',width=10,command=lambda : work(’6’)).grid(row=2,column=2) tkinter.Button(number,text='-',width=10,command=lambda : work(’-’)).grid(row=2,column=3) tkinter.Button(number,text='1',width=10,command=lambda : work(’1’)).grid(row=3,column=0) tkinter.Button(number,text='2',width=10,command=lambda : work(’2’)).grid(row=3,column=1) tkinter.Button(number,text='3',width=10,command=lambda : work(’3’)).grid(row=3,column=2) tkinter.Button(number,text='+',width=10,command=lambda : work(’+’)).grid(row=3,column=3) tkinter.Button(number,text='%',width=10,command=lambda : work(’%’)).grid(row=4,column=0) tkinter.Button(number,text='0',width=10,command=lambda : work(’0’)).grid(row=4,column=1) tkinter.Button(number,text='.',width=10,command=lambda : work(’.’)).grid(row=4,column=2) tkinter.Button(number,text='=',width=10,command=lambda : work(’=’)).grid(row=4,column=3) root.mainloop()if __name__==’__main__’: run()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | RFID电子标签厂家-上海尼太普电子有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 石英粉,滑石粉厂家,山东滑石粉-莱州市向阳滑石粉有限公司 | 361°官方网站| 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 517瓜水果特产网|一个专注特产好物的网站 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 氧化锆陶瓷_氧化锆陶瓷加工_氧化锆陶瓷生产厂家-康柏工业陶瓷有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 收录网| 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 长沙印刷厂-包装印刷-画册印刷厂家-湖南省日大彩色印务有限公司 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 |