A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

库: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()


以上。
---------------------
作者:ocean35
来源:CSDN
原文:https://blog.csdn.net/ocean35/article/details/83662413

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马