用python实现计算器功能,如何用python设计一个计算器
这篇文章主要为大家详细介绍了大蟒制作简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了大蟒实现简单计算器功能的具体代码,供大家参考,具体内容如下
效果如图:
主要思路:
用列表保存按下的键,按下等于,转换为字符串,利用内置函数评价评价计算字符串的值。
代码:
来自tkinter导入*
W=280 #窗口宽度
H=460 #窗口高度
process_H=110 #显示运算过程的标签高度
结果H=50 #显示运算结果的标签高度
msFont=微软雅黑 #字体
fontSize=20 #字体大小
btnBoderWidth=0.5 #边框宽度
btnColor=#4F4F4F #按钮颜色
btnWidth=70 #按钮宽度
btnHeight=60 #按钮高度
mainWindows=Tk()
mainWindows.title(计算器)
mainWindows.minsize(宽,高)
str_process=StringVar()
str_process.set( )
str_result=StringVar()
str_result.set(0 )
process=Label(mainWindows,font=(msFont,fontSize),bg=orange ,anchor=se ,wraplength=280 ,textvariable=str_process)
过程.地点(宽度=W,高度=process_H) #显示运算过程的标签
result=Label(mainWindows,font=(msFont,fontSize 10),bg=orange ,anchor=se ,textvariable=str_result)
result.place(y=process_H,width=W,height=result_H) #显示运算结果的标签
button_AC=Button(mainWindows,font=(msFont,fontSize),text=AC ,fg=orange ,bd=btnBoderWidth,command=lambda :clickAC())
button_AC.place(x=0,y=process_H result_H,width=btnWidth,height=btnHeight)
button_back=Button(mainWindows,font=(msFont,fontSize),text=,fg=btnColor,bd=btnBoderWidth,command=lambda :clickBack())
button_back.place(x=btnWidth,y=process_H result_H,width=btnWidth,height=btnHeight)
button_div=Button(mainWindows,font=(msFont,fontSize),text=,fg=btnColor,bd=btnBoderWidth,command=lambda : clickoper(/))
button_div.place(x=btnWidth*2,y=process_H result_H,width=btnWidth,height=btnHeight)
button_mul=Button(mainWindows,font=(msFont,fontSize),text=,fg=btnColor,bd=btnBoderWidth,command=lambda : clickoper( * )
button_mul.place(x=btnWidth*3,y=process_H result_H,width=btnWidth,height=btnHeight)
button_7=Button(mainWindows,font=(msFont,fontSize),text=7 ,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(7 ))
button_7.place(x=0,y=process_H result_H btnHeight,width=btnWidth,height=btnHeight)
button_8=Button(mainWindows,font=(msFont,fontSize),text=8 ,fg=btnColor,bd=btnBoderWidth,comm
and=lambda :clickNum(8))
button_8.place(x=btnWidth,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight)
button_9 = Button(mainWindows,font=(msFont,fontSize),text=9,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(9))
button_9.place(x=btnWidth*2,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight)
button_minus = Button(mainWindows,font=(msFont,fontSize),text=-,fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper(-))
button_minus.place(x=btnWidth*3,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight)
button_4 = Button(mainWindows,font=(msFont,fontSize),text=4,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(4))
button_4.place(x=0,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight)
button_5 = Button(mainWindows,font=(msFont,fontSize),text=5,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(5))
button_5.place(x=btnWidth,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight)
button_6 = Button(mainWindows,font=(msFont,fontSize),text=6,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(6))
button_6.place(x=btnWidth*2,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight)
button_add = Button(mainWindows,font=(msFont,fontSize),text=+,fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper(+))
button_add.place(x=btnWidth*3,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight)
button_1 = Button(mainWindows,font=(msFont,fontSize),text=1,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(1))
button_1.place(x=0,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight)
button_2 = Button(mainWindows,font=(msFont,fontSize),text=2,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(2))
button_2.place(x=btnWidth,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight)
button_3 = Button(mainWindows,font=(msFont,fontSize),text=3,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(3))
button_3.place(x=btnWidth*2,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight)
button_equal = Button(mainWindows,font=(msFont,fontSize),text==,bg=orange,fg=btnColor,bd=btnBoderWidth,command=lambda :clickEqual())
button_equal.place(x=btnWidth*3,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight*2)
button_percent = Button(mainWindows,font=(msFont,fontSize),text=%,fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper("%"))
button_percent.place(x=0,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight)
button_0 = Button(mainWindows,font=(msFont,fontSize),text=0,fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum(0))
button_0.place(x=btnWidth,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight)
button_point = Button(mainWindows,font=(msFont,fontSize),text=.,fg=btnColor,bd=btnBoderWidth,command=lambda :clickPoint())
button_point.place(x=btnWidth*2,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight)
process_list = []
s_result = ""
isNum = [False] #上一位按下的是否是数字
point = [True] #小数点使用情况
def clickNum(num): #按下数字
isNum.append(True)
point.append(point[-1]) #按下数字,小数点的标志不变
process_list.append(num)
s_process = "".join(process_list)
str_process.set(s_process)
def clickOper(sign):#按下运算符
global isNum,point
if isNum[-1]:
process_list.append(sign)
isNum.append(False)
point.append(True) #按下运算符,小数点标志为可以按下小数点
else:
process_list.pop()
process_list.append(sign)
s_process = "".join(process_list)
str_process.set(s_process)
def clickEqual():#按下等于
global s_result
s_process = "".join(process_list)
s_result = eval(s_process)
s_result = str(s_result)[0:11] #结果只显示11位
str_process.set(s_process)
str_result.set(s_result)
def clickAC():#按下清除
global s_result,isNum,point
s_result = "0"
isNum = [False] #状态回到初始时候
point = [True]
process_list.clear()
str_result.set(s_result)
str_process.set("")
def clickBack(): #按下退格键
global point, isNum
if len(process_list) > 0:
isNum.pop(-1) #删除最后一位的状态
point.pop(-1)
process_list.pop()
s_process = "".join(process_list)
str_process.set(s_process)
def clickPoint():#按下小数点
global point,isNum
if isNum[-1] and point[-1]:
process_list.append(".")
s_process = "".join(process_list)
str_process.set(s_process)
isNum.append(False)
point.append(False)
mainWindows.mainloop()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。