本人最近在学习tkinter库的实例运用,于是简易做了一个计算机四则运算
为了引用简便
import tkinter as tk
1.先创建窗口实体并命名标题
root=tk.Tk()
root.title('calculator')
2.设置框架用于装入各种小组件
frame2用于装载计算键,计算显示数
frame1用于装载数字键和运算键
frame2=tk.Frame(root)
frame2.pack(padx=5,pady=5)
frame1=tk.Frame(root)
frame1.pack(padx=10,pady=10)
3.设置所需的变量
result1=tk.StringVar()
result2=tk.StringVar()
4.设置运算模式的变量
mode=0
5.先设置好按钮(这里用grid的布局更合适)
tk.Button(frame1,text='1',width=5,height=3,font=(20)).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20)).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20)).grid(row=1,column=3)
tk.Button(frame1,text='4',width=5,height=3,font=(20)).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20)).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20)).grid(row=2,column=3)
tk.Button(frame1,text='7',width=5,height=3,font=(20)).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20)).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20)).grid(row=3,column=3)
tk.Button(frame1,text='归零',width=5,height=3,font=(20)).grid(row=4,column=1)
tk.Button(frame1,text='0',width=5,height=3,font=(20)).grid(row=4,column=2)
tk.Button(frame1,text='.',width=5,height=3,font=(20)).grid(row=4,column=3)
tk.Button(frame1,text='x',width=5,height=3,font=(20)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20)).grid(row=4,column=4)
注意row是行,column是列
如图
6.设置计算显示区域和计算键
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=0,column=2)
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=1,column=2)
tk.Button(frame2,text='计算',width=3,height=1,font=(20)).grid(row=2,column=2)
如图
7.定义cal函数
def cal(x):
result1.set(result1.get()+x)
8.给数字按钮添加指令
command=lambda: cal('1')
9.设置好的数字按钮
tk.Button(frame1,text='1',width=5,height=3,font=(20),command=lambda: cal('1')).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20),command=lambda: cal('2')).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20),command=lambda: cal('3')).grid(row=1,column=3)
tk.Button(frame1,text='4',width=5,height=3,font=(20),command=lambda: cal('4')).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20),command=lambda: cal('5')).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20),command=lambda: cal('6')).grid(row=2,column=3)
tk.Button(frame1,text='7',width=5,height=3,font=(20),command=lambda: cal('7')).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20),command=lambda: cal('8')).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20),command=lambda: cal('9')).grid(row=3,column=3)
tk.Button(frame1,text='0',width=5,height=3,font=(20),command=lambda: cal('0')).grid(row=4,column=2)
10.按一下123键
如图
11.定义delet函数(用于归零)
def delet():
result1.set('')
result2.set('')
12.设置归零键和小数点键的按钮命令
tk.Button(frame1,text='归零',width=5,height=3,font=(20),command=lambda: delet()).grid(row=4,column=1)
tk.Button(frame1,text='.',width=5,height=3,font=(20),command=lambda: cal('.')).grid(row=4,column=3)
注:小数点的命令函数是cal(x),因此点击多次会出现多个小数点报错
13.定义vv(x)函数用于四则运算按钮(作者打算只用于运算模式设置,最终结果计算依赖于计算键的命令函数)
def vv(x):
if result1.get()!='':
result2.set(result1.get())
result1.set('')
global mode
mode = x
elif result1.get()=='':
pass
14.设置四则运算按钮命令
tk.Button(frame1,text='x',width=5,height=3,font=(20),command=lambda: vv(3)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20),command=lambda: vv(4)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20),command=lambda: vv(1)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20),command=lambda: vv(2)).grid(row=4,column=4)
15.定义函数deng(),用于结果计算,绑定计算键按钮
def deng():
if mode==1:
e=float(result1.get())+float(result2.get())
result1.set(str('%.4f'% e))
elif mode==2:
e=float(result2.get())-float(result1.get())
result1.set(str('%.4f'% e))
elif mode==3:
e=float(result2.get())*float(result1.get())
result1.set(str('%.4f'% e))
elif mode==4:
e=float(result2.get())/float(result1.get())
result1.set(str('%.4f'% e))
为了结果精确,取小数点后四位
16.最后别忘了加
root.mainloop()
窗口持续运行必加
17.效果展示:计算1.2+3.4-2.3(由于只设置了result1和result2,所以只能分为两次计算)
加
计算
减
计算,得到
18.完整代码
import tkinter as tk
root=tk.Tk()
root.title('calculaotr')
frame2=tk.Frame(root)
frame2.pack(padx=5,pady=5)
frame1=tk.Frame(root)
frame1.pack(padx=10,pady=10)
result1=tk.StringVar()
result2=tk.StringVar()
def cal(x):
result1.set(result1.get()+x)
def delet():
result1.set('')
result2.set('')
def vv(x):#mode1
if result1.get()!='':
result2.set(result1.get())
result1.set('')
global mode
mode = x
elif result1.get()=='':
pass
def deng():
if mode==1:
e=float(result1.get())+float(result2.get())
result1.set(str('%.4f'% e))
elif mode==2:
e=float(result2.get())-float(result1.get())
result1.set(str('%.4f'% e))
elif mode==3:
e=float(result2.get())*float(result1.get())
result1.set(str('%.4f'% e))
elif mode==4:
e=float(result2.get())/float(result1.get())
result1.set(str('%.4f'% e))
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=0,column=2)
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=1,column=2)
tk.Button(frame2,text='计算',width=3,height=1,font=(20),command=lambda: deng()).grid(row=2,column=2)
tk.Button(frame1,text='1',width=5,height=3,font=(20),command=lambda: cal('1')).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20),command=lambda: cal('2')).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20),command=lambda: cal('3')).grid(row=1,column=3)
tk.Button(frame1,text='4',width=5,height=3,font=(20),command=lambda: cal('4')).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20),command=lambda: cal('5')).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20),command=lambda: cal('6')).grid(row=2,column=3)
tk.Button(frame1,text='7',width=5,height=3,font=(20),command=lambda: cal('7')).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20),command=lambda: cal('8')).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20),command=lambda: cal('9')).grid(row=3,column=3)
tk.Button(frame1,text='归零',width=5,height=3,font=(20),command=lambda: delet()).grid(row=4,column=1)
tk.Button(frame1,text='0',width=5,height=3,font=(20),command=lambda: cal('0')).grid(row=4,column=2)
tk.Button(frame1,text='.',width=5,height=3,font=(20),command=lambda: cal('.')).grid(row=4,column=3)
tk.Button(frame1,text='x',width=5,height=3,font=(20),command=lambda: vv(3)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20),command=lambda: vv(4)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20),command=lambda: vv(1)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20),command=lambda: vv(2)).grid(row=4,column=4)
root.mainloop()
结束
本人只是小白,若有改进方案,还望多多赐教
参考文献:
【python】tkinter教程、35个tkinter示例代码和GUI图示_python:基于实例的gui tkinter 编程-CSDN博客Python保留指定位数的小数【5种方法】_python保留小数点后三位-CSDN博客
Tkinter Button按钮组件如何调用一个可以传入参数的函数_button()的入参-CSDN博客
Python中的get和set方法_python get set-CSDN博客(用于获取StringVar或IntVar的文本值)
tkinter库详解-CSDN博客(介绍root,frame,label,button等基本概念)