Python实用工具,tkinter模块,Python实现简易版计算器
前言:
Python制作一个简单的计算器呗。
让我们愉快地开始吧~
开发工具
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~完整源代码+干货详见个人主页简介或私信领取