python制作简单计算器功能

 更新时间:2022年02月07日 09:42:41   作者:丶蓝色  
这篇文章主要为大家详细介绍了python制作简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现简单计算器功能的具体代码,供大家参考,具体内容如下

效果如图:

主要思路:

用列表保存按下的键,按下等于,转换为字符串,利用内置函数eval计算字符串的值。

代码:

from tkinter import *
 
W = 280 #窗口宽度
H = 460 #窗口高度
process_H = 110 #显示运算过程的标签高度
result_H = 50   #显示运算结果的标签高度
msFont = '微软雅黑' #字体
fontSize = 20 #字体大小
 
btnBoderWidth = 0.5 #边框宽度
btnColor = '#4F4F4F' #按钮颜色
btnWidth = 70 #按钮宽度
btnHeight = 60 #按钮高度
 
mainWindows = Tk()
mainWindows.title('计算器')
mainWindows.minsize(W,H)
 
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)
process.place(width=W,height=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,command=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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 简单介绍一下pyinstaller打包以及安全性的实现

    简单介绍一下pyinstaller打包以及安全性的实现

    这篇文章主要介绍了简单介绍一下pyinstaller打包以及安全性的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python缩进和冒号详解

    Python缩进和冒号详解

    下面小编就为大家带来一篇Python缩进和冒号详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Python中图像通用操作的实现代码

    Python中图像通用操作的实现代码

    这篇文章主要为大家详细介绍了Python中图像通用操作的实现,例如:图像旋转、图像缩放等,文中的示例代码讲解详细,需要的可以参考一下
    2023-07-07
  • Python开发常用五种循环方式的场景性能比较

    Python开发常用五种循环方式的场景性能比较

    Python是一门高级编程语言,其拥有多种循环方式,如for循环、while循环、do-while循环等。本文将逐个分析Python所有的循环执行效率和适用场景,需要的可以参考一下
    2023-04-04
  • Python实现将横表和纵表任意转换的两种方法

    Python实现将横表和纵表任意转换的两种方法

    在日常做数据分析,接收到最多的表格是纵表,每个字段变量都有很长数据的长表,我们称之为纵向数据,但是,有时候,我们也会遇到横表,对于横向数据,我们会数据转化,将其转化为纵向数据,感兴趣的同学跟着小编一起来学习吧
    2023-12-12
  • CentOS安装OpenSSL1.1.1全过程

    CentOS安装OpenSSL1.1.1全过程

    文章介绍了从头开始编译安装Python3.10的步骤,包括检查和安装必要的依赖项、下载并解压源码、配置和编译环境、创建软连接以及配置环境变量,最后验证安装是否成功
    2025-03-03
  • Python unittest如何生成HTMLTestRunner模块

    Python unittest如何生成HTMLTestRunner模块

    这篇文章主要介绍了Python unittest如何生成HTMLTestRunner模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python脚本实现调用手机摄像头

    Python脚本实现调用手机摄像头

    这篇文章主要为大家详细介绍了Python如何通过,脚本实现调用手机摄像头,这样就能随时随地用电脑偷偷看看男朋友都在干啥了,感兴趣的小伙伴可以了解下
    2025-03-03
  • 利用keras加载训练好的.H5文件,并实现预测图片

    利用keras加载训练好的.H5文件,并实现预测图片

    今天小编就为大家分享一篇利用keras加载训练好的.H5文件,并实现预测图片,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 给Python中的MySQLdb模块添加超时功能的教程

    给Python中的MySQLdb模块添加超时功能的教程

    这篇文章主要介绍了给Python中的MySQLdb模块添加超时功能的教程,timeout功能在服务器的运维当中非常有用,需要的朋友可以参考下
    2015-05-05

最新评论