计算器

作者
promethus-code
要用到的库
- tkinter库
开始思路
python的shell框里输入加减乘除可以直接给出答案
python的内置函数eval()函数可以执行一个字符串表达式,并返回表达式的值。
tkinter库可以给我们提供按钮输入数字和运算符,也可以提供文本框显示值。
tkinter库里可能用到的函数以及选项
- 注:选项里的master只是表示主容器名,可以替换
- Label(master,width= ,anchor= ,textvariable= )
- Button(master,width= ,text= ,command= )
- Entry(master,width= ,justify= )
其他注意事项
- Button里的command是只能调用函数,不能使用方法,所以为了实现command使用方法可以用匿名函数lambda
- 多次调用Button时,可能会出现一些要多次重复的选项,这时可以使用functools模块里的partial()函数固定住这些选项的输入
可视化框架建设

预览图片
- 根据预览图片大体可以分为四个部分:
标题
label显示区
文本框
按键区
1.标题
首先我们先导入模块并创建一个窗口
1 | import tkinter as tk |
大体如下

2.label显示区
做这个的思路是来自window里的计算器里放结果的地方无法直接通过键盘修改数字所以选用Label,当然也可以用文本框代替
作用:保留上一个运算式和结果并显示出来
1
2
3text1=tk.StringVar()
label1 =tk.Label(root, width=25,anchor='se',textvariable=text1)#显示的文本内容向右对齐
label1.grid(row=0,column=0,columnspan=5)#把label1放在窗口里的第一行
大体如下

在root.mainloop前加一段测试label(测试完后删去这段)
text1.set(“hello world”)

3.文本框
作用:作为开始计算运算式前的缓存区
1
2entry1=tk.Entry(root, width=25, justify="right")#使输入从右往左
entry1.grid(row=1, column=0, columnspan=5, sticky=tk.N + tk.W + tk.S + tk.E)
大体如下

可能有点看不到文本框的显示,我随便写几个数字进去

这样就完成了以上三个部分。
4.1按钮区的布置
- 这个部分可能是工程量最大的地方,我们先搞好布局,再考虑按钮调用的问题
- 关于布局可以参考我的布局

我们先安放两行按钮
1 | button_z1= tk.Button(width=5,text='(') |
大体如下

- 我们把按钮的宽度定为5是因为我们前面的label显示区和文本框的宽度都定为25,为了安放5个按钮一行,所以我们定位一个按钮的宽度为5.
接下来到剩下的三行按钮
1 | button_4=tk.Button(width=5,text=' 4 ') |

布局就这样完成了。
4.2按钮区的函数调用
我们完成了布局,现在在我们面前就只有一个问题了,我们如何用起这些按钮?
前文提到了我们可以利用eval函数来帮助我们实现计算结果
那我们可以直接使用字符串来帮助我们实现计算结果。
对于 1 2 3 4 5 6 7 8 9 ( )/ * - + % . 这些键我们可以直接这样写
1 | button_z1= tk.Button(width=5,text='(',command=lambda:entry1.insert(INSERT,' ( ')) |
在后面用文本框的方法把对应的字符加上去
但对于 = C ←这三个键我们就要特别对待了
‘ = ‘键的command内容enter函数
1
2
3
4
5def enter():
en=eval(entry1.get())
el=entry1.get()
text1.set(el+'='+str(en))
entry1.delete(0,END)‘ c ‘键的command内容clear函数
1
2
3def clear():
entry1.delete(0,END)
text1.set(' ')‘ ← ‘键
1
button_del= tk.Button(width=5,text='←',command=lambda:entry1.delete(len(entry.get()) -1))