python编写计算器,供大家参考,具体内容如下
(1)计算器界面如下:
(2)基本满足了计算器的所有需求,使用时不可键盘输入,只能鼠标点击左键才可执行。初始时显示0.0,每次输入的内容存于D:\num.txt(启动程序时自动创建)
(3)" AC " 记录清零返回初始 0.0;" delete " 删除上一个输入内容;" +/- " 将正数为负数,负数为正数
(4)对于不同的进制数值系统,小数的精准值不同。
因此计算机会出现 0.1+0.2=0.3000000000004 的现象
能对数据进行截断处理,可以解决问题,但精度丧失。
(此计算机没有进行截断处理)
import tkinter,os from tkinter import * def temp(string):#空白间隔 temp=tkinter.Frame(string,width=20,height=50) temp.pack() flag=0 node=0 def 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')) # 重新设置标签文本 root.after(500,num_work) # 每隔0.5s调用函数num_work自身获取结果 def num_math_int(num1,num2):#整数运算 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):#小数运算 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):#按键对应的功能 if string.isnumeric(): with open("D:\\num.txt","a") as file: file.write(string) else: #读取文件D:\\num.txt所有内容 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.0\n') elif string=='=': num1=lists[-2] num2=lists[-1] if num1=='\n':#解决末尾为换行的情况 num1=lists[-3] #将百分数小数化 #出现结果多0.0000000001 num1=decimal(num1) num2=decimal(num2) try: #判断两个数是整数还是小数 number=int(num1) number=int(num2[1:]) num_math_int(num1,num2)#两个数进行整数运算 except: num_math_float(num1,num2)#两个数进行小数运算 elif string=='.': if lists[-1].count('.')==0:#判断结尾是否有小数点,没有写入否则报错 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.0\n') global root#定义全局变量root,方便Label更新 root=tkinter.Tk() root.title("计算器") #x = root.winfo_screenwidth() #获取当前屏幕的宽 #y = root.winfo_screenheight() #获取当前屏幕的高 #print(((x-500)//2),((y-600)//2))#为居中提供的参数 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)#成放计算机键盘的容器 number.pack() #所有按键,AC键为事例 numberAC=tkinter.Button(number,text="AC",width=10,command=lambda : work('AC')).grid(row=0,column=0) #左键点击,执行函数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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
python,GUI,计算器
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]