Python实用工具,tkinter模块,Python实现简易版计算器

Python实用工具,tkinter模块,Python实现简易版计算器

前言:

Python制作一个简单的计算器呗。
让我们愉快地开始吧~

image.png

开发工具

Python版本:3.6.4
相关模块:
python自带的tkinter和math模块即可。
环境搭建

安装Python并添加到环境变量即可。

原理简介

先利用tkinter搭建基本的计算器界面,这里就不详细说明了,请自行参考相关文档,如:

https://docs.python.org/zh-cn/3/library/tk.html

按键功能介绍如下:
0-9:数字键
.:小数点
+:加法
-:减法
*:乘法
/:除法
=:计算结果
1/x:取倒数
%:取余
del:退格键
CE:清空当前
C:清空所有
+/-:取反
sqrt:开根号
MC:将目前记忆的数字归零
MR:将当前计算出来的数字呈现出来
MS:无视目前记忆多少数字,直接以当前数字取代记忆中的数字
M+:记忆当前数字
M-:记忆当前数字(负数形式)
因为直接调用了math库和python的eval函数,所以功能实现起来很简单,这里主要讲几个实现过程中需要注意的细节。

(1)退格操作

显示框中只有一个数字的时候,使用退格键后应当使显示框显示数字0,而不是空。

(2)非法操作

把将0作为分母或对负数开根号等操作归入非法操作,避免程序抛出异常。

(3)设置当前显示字符最大长度

因为显示框长度有限,所以能显示的字符数量也有限,因此需要设置当前显示字符最大长度。比如用户不可以无限制地连续输入一连串数字,最终结果只能保留前多少位等等。

部分代码

"""Demo"""
def Demo():
	root.minsize(320, 420)
	root.title("Calculator")
	# 布局
	# --文本框
	label = tkinter.Label(root, textvariable=CurrentShow, bg="black", anchor="e", bd=5, fg="white", font=("楷体", 20))
	label.place(x=20, y=50, width=280, height=50)
	# --第一行
	# ----Memory clear
	button1_1 = tkinter.Button(text="MC", bg="#666", bd=2, command=lambda:pressOperator("MC"))
	button1_1.place(x=20, y=110, width=50, height=35)
	# ----Memory read
	button1_2 = tkinter.Button(text="MR", bg="#666", bd=2, command=lambda:pressOperator("MR"))
	button1_2.place(x=77.5, y=110, width=50, height=35)
	# ----Memory save
	button1_3 = tkinter.Button(text="MS", bg="#666", bd=2, command=lambda:pressOperator("MS"))
	button1_3.place(x=135, y=110, width=50, height=35)
	# ----Memory +
	button1_4 = tkinter.Button(text="M+", bg="#666", bd=2, command=lambda:pressOperator("M+"))
	button1_4.place(x=192.5, y=110, width=50, height=35)
	# ----Memory -
	button1_5 = tkinter.Button(text="M-", bg="#666", bd=2, command=lambda:pressOperator("M-"))
	button1_5.place(x=250, y=110, width=50, height=35)
	# --第二行
	# ----删除单个数字
	button2_1 = tkinter.Button(text="del", bg="#666", bd=2, command=lambda:delOne())
	button2_1.place(x=20, y=155, width=50, height=35)
	# ----清除当前显示框内所有数字
	button2_2 = tkinter.Button(text="CE", bg="#666", bd=2, command=lambda:clearCurrent())
	button2_2.place(x=77.5, y=155, width=50, height=35)
	# ----清零(相当于重启)
	button2_3 = tkinter.Button(text="C", bg="#666", bd=2, command=lambda:clearAll())
	button2_3.place(x=135, y=155, width=50, height=35)
	# ----取反
	button2_4 = tkinter.Button(text="+/-", bg="#666", bd=2, command=lambda:pressOperator("+/-"))
	button2_4.place(x=192.5, y=155, width=50, height=35)
	# ----开根号
	button2_5 = tkinter.Button(text="sqrt", bg="#666", bd=2, command=lambda:pressOperator("sqrt"))
	button2_5.place(x=250, y=155, width=50, height=35)
	# --第三行
	# ----7
	button3_1 = tkinter.Button(text="7", bg="#bbbbbb", bd=2, command=lambda:pressNumber("7"))
	button3_1.place(x=20, y=200, width=50, height=35)
	# ----8
	button3_2 = tkinter.Button(text="8", bg="#bbbbbb", bd=2, command=lambda:pressNumber("8"))
	button3_2.place(x=77.5, y=200, width=50, height=35)
	# ----9
	button3_3 = tkinter.Button(text="9", bg="#bbbbbb", bd=2, command=lambda:pressNumber("9"))
	button3_3.place(x=135, y=200, width=50, height=35)
	# ----除
	button3_4 = tkinter.Button(text="/", bg="#708069", bd=2, command=lambda:pressOperator("/"))
	button3_4.place(x=192.5, y=200, width=50, height=35)
	# ----取余
	button3_5 = tkinter.Button(text="%", bg="#708069", bd=2, command=lambda:pressOperator("%"))
	button3_5.place(x=250, y=200, width=50, height=35)
	# --第四行
	# ----4
	button4_1 = tkinter.Button(text="4", bg="#bbbbbb", bd=2, command=lambda:pressNumber("4"))
	button4_1.place(x=20, y=245, width=50, height=35)
	# ----5
	button4_2 = tkinter.Button(text="5", bg="#bbbbbb", bd=2, command=lambda:pressNumber("5"))
	button4_2.place(x=77.5, y=245, width=50, height=35)
	# ----6
	button4_3 = tkinter.Button(text="6", bg="#bbbbbb", bd=2, command=lambda:pressNumber("6"))
	button4_3.place(x=135, y=245, width=50, height=35)
	# ----乘
	button4_4 = tkinter.Button(text="*", bg="#708069", bd=2, command=lambda:pressOperator("*"))
	button4_4.place(x=192.5, y=245, width=50, height=35)
	# ----取导数
	button4_5 = tkinter.Button(text="1/x", bg="#708069", bd=2, command=lambda:pressOperator("1/x"))
	button4_5.place(x=250, y=245, width=50, height=35)
	# --第五行
	# ----3
	button5_1 = tkinter.Button(text="3", bg="#bbbbbb", bd=2, command=lambda:pressNumber("3"))
	button5_1.place(x=20, y=290, width=50, height=35)
	# ----2
	button5_2 = tkinter.Button(text="2", bg="#bbbbbb", bd=2, command=lambda:pressNumber("2"))
	button5_2.place(x=77.5, y=290, width=50, height=35)
	# ----1
	button5_3 = tkinter.Button(text="1", bg="#bbbbbb", bd=2, command=lambda:pressNumber("1"))
	button5_3.place(x=135, y=290, width=50, height=35)
	# ----减
	button5_4 = tkinter.Button(text="-", bg="#708069", bd=2, command=lambda:pressOperator("-"))
	button5_4.place(x=192.5, y=290, width=50, height=35)
	# ----等于
	button5_5 = tkinter.Button(text="=", bg="#708069", bd=2, command=lambda:pressOperator("="))
	button5_5.place(x=250, y=290, width=50, height=80)
	# --第六行
	# ----0
	button6_1 = tkinter.Button(text="0", bg="#bbbbbb", bd=2, command=lambda:pressNumber("0"))
	button6_1.place(x=20, y=335, width=107.5, height=35)
	# ----小数点
	button6_2 = tkinter.Button(text=".", bg="#bbbbbb", bd=2, command=lambda:pressDP())
	button6_2.place(x=135, y=335, width=50, height=35)
	# ----加
	button6_3 = tkinter.Button(text="+", bg="#708069", bd=2, command=lambda:pressOperator("+"))
	button6_3.place(x=192.5, y=335, width=50, height=35)
	root.mainloop()


if __name__ == "__main__":
	Demo()

文章到这里就结束了,感谢你的观看,关注我每天分享Python小工具系列,下篇文章分享Turtle库制作简易时钟

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

⑥ 两天的Python爬虫训练营直播权限

All done~完整源代码+干货详见个人主页简介或私信领取

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Python实用工具,tkinter模块,Python实现简易版计算器