库:tkinter
计算器组成很简单,由于刚学了Label,Button,Entry等主键,就忍不住想尝试一下。
思路很简单把各个键构建出来排好布局,在给各个Button写入函数。
对于输入计算内容python有很强大的字符串处理函数eval(). 等够把能够计算字符串内容提取出来计算。
例:
`str1='3+5*2
str2=eval(str1)
print(str1)
print(str2)
`
输出结果分别为
str1:3+5*2
str2:13
在布局方面要想主键跟随根窗口大小自动填充的话,可以设置跟窗口的属性
#跟随填充效果,就不会因为拖拽出现按键不移动而产生的空白区域,影响美观
`root=Tk()
root.rowconfigure(0,weight=1)
root.columnconfigure(0,weight=1)
`
from tkinter import *
#输入框纯数字验证
def test(content):
return content.isdigit()
#加法按钮函数
def add():
inputentry.insert(END,"+")
#减法按钮函数
def sub():
inputentry.insert(END,"-")
#乘法函数
def multi():
inputentry.insert(END,"*")
#除法函数
def division():
inputentry.insert(END,"/")
#小数点
def point():
inputentry.insert(END,".")
#复位函数
def empty():
inputentry.delete(0,END)
#括号函数
def bracket():
inputentry.insert(END,"()")
#结果计算函数
def result():
processshow.delete(0,END)
processshow.insert(END,inputentry.get())
str1=inputentry.get()
str2=eval(str1)
inputentry.delete(0,END)
inputentry.insert(0,str2)
#main函数
root=Tk()
root.rowconfigure(0,weight=1)
root.columnconfigure(0,weight=1)
v=IntVar()
v1=StringVar()
root.title("计算器")
def test(content):
return content.isdigit()
oneframe=Frame(root)
oneframe.grid()
oneframe.grid_propagate(flag=True)
testCMD=root.register(test)
processshow=Entry(oneframe,textvariable=v1,width=40,justify=RIGHT)
processshow.grid()
Label(oneframe,text="计算过程:").grid(row=0,sticky=W)
inputentry=Entry(oneframe,textvariable=v,width=40,justify=RIGHT)
inputentry.grid()
inputentry.delete(0,END)
Label(oneframe,text="计算内容:").grid(stick=W,row=1)
secondframe=Frame(root)
secondframe.grid()
#第一行功能按钮
Button(secondframe,text="+",command=add).grid(row=2,column=0,padx=5,pady=5,stick=W)
Button(secondframe,text="--",command=sub).grid(row=2,column=1,padx=5,pady=5)
Button(secondframe,text=".",command=point).grid(row=2,column=2,padx=5,pady=5)
Button(secondframe,text="C",command=empty).grid(row=2,column=3,padx=5,pady=5)
#第二行功能按钮
Button(secondframe,text="*",command=multi).grid(row=3,column=0,padx=5,pady=10,stick=W)
Button(secondframe,text="/",command=division).grid(row=3,column=1,padx=5,pady=10)
Button(secondframe,text="( )",command= bracket).grid(row=3,column=2,padx=10,pady=15)
Button(secondframe,text="=",command=result).grid(row=3,column=3,padx=15,pady=20)
mainloop()
以上。