【Python】tkinter应用之简易计算器

tkinter应用之简易计算器

  • 实现效果
  • 程序代码

实现效果

【Python】tkinter应用之简易计算器_第1张图片
【Python】tkinter应用之简易计算器_第2张图片
【Python】tkinter应用之简易计算器_第3张图片
【Python】tkinter应用之简易计算器_第4张图片
【Python】tkinter应用之简易计算器_第5张图片
【Python】tkinter应用之简易计算器_第6张图片

程序代码

import re
import tkinter
import  tkinter.messagebox

root = tkinter.Tk()
#设置窗口的大小和位置
root.geometry('300x270+400+100')
#不允许改变窗口的大小
root.resizable(False,False)
#设置窗口标题
root.title('简易计算器')

#设置用来显示信息的文本框,并设置为只读
contnetVar = tkinter.StringVar(root , '')
contnetEntry = tkinter.Entry(root, textvariable=contnetVar)
contnetEntry['state'] = 'readonly'
contnetEntry.place(x=10,y=10,width=280,height=20)

#按钮通用代码
def buttonClick(btn):
    contnet = contnetVar.get()
    #如果已有内容是以小数点开头的,前面加0
    if contnet.startswith('.'):
        contnet = '0'+contnet

    #根据不同的按钮做出相应的处理
    if btn in '0123456789':
        contnet += btn
    elif btn =='.':
        lastPart = re.split(r'\+|-|\*|/]',contnet)[-1]
        if '.' in lastPart:
            tkinter.messagebox.showerror('错误','小数点太多了')
            return
        else:
            contnet += btn
    elif btn == 'C':
        contnet =''
    elif btn == '=':
        try:
            #对输入的表达式进行求值
            contnet = str(eval(contnet))
        except:
            tkinter.messagebox('错误','表达式错误')
            return
    elif btn in operators:
        if contnet.endswith(operators):
            tkinter.messagebox.showerror('错误','不允许存在连续运算符')
            return
        contnet += btn
    elif btn == 'Sqrt':
        n = contnet.split('.')
        if all(map(lambda x:x.isdigit(),n)):
            contnet = eval(contnet)**0.5
        else:
            tkinter.messagebox.showerror('错误','表达式错误')
            return
    contnetVar.set(contnet)

#放置 清空 按钮 和 ‘=’ 按钮
btnClear = tkinter.Button(root,text='清空',command=lambda :buttonClick('C'))
btnClear.place(x=40,y=40,width=80,height=20)
btnClear = tkinter.Button(root,text='=',command=lambda :buttonClick('='))
btnClear.place(x=170,y=40,width=80,height=20)

#放置10个数字、小数点、和计算平方根的按钮
digits = list('0123456789.')+['Sqrt']
index = 0
for row in range(4):
    for col in range(3):
        d = digits[index]
        index += 1
        btnDigit = tkinter.Button(root, text=d, command=lambda x=d : buttonClick(x))
        btnDigit.place(x=20+col*70, y=80+row*50, width=50, height=20)

#放置运算符按钮
operators = ('+','-','*','/','**','//')
for index, operator in enumerate(operators):
    btnOperator = tkinter.Button(root, text=operator, command=lambda x=operator : buttonClick(x))
    btnOperator.place(x=230, y=80 + index * 30, width=50, height=20)

#启动循环
root.mainloop()

你可能感兴趣的:(Python,python,开发语言)