计算器的复杂制作

本文介绍了如何在Python中制作一个带有输入框的计算器。通过使用Entry组件替换简单计算器的显示方式,使得用户可以直接输入数值。实现过程中涉及将Entry中的数字与变量同步,并确保输入框非空等操作,虽然看似简单,但理解起来具有一定挑战。最后,调整键位和样式,完成一个既可按键又可手动输入的计算器应用。

与其说是复杂制作,实际上只是增加了一个显示屏输入:

效果如下:

 


一样的开头:

from tkinter import *

root = Tk()
root.title("计算机")
root.geometry("400x550+270+200")
root.resizable(0, 0)

但是:显示框要更换为Entry

# 显示框
entry = Entry(root, font=('黑体', 60), width=400)
# 显示框——布局
entry.place(x=0, y=0)
all_date = ""

简单来说就是把简单版的s(详情请看计算器的简单制作):

def bt1():
    global all_date
    all_date = entry.get()
    all_date += "1"

    if entry.get()!="":
        entry.delete(0,END)

    entry.insert(0, all_date)

def bt2():
    global all_date 
    all_date = entry.get()
    all_date += "2"

    if entry.get()!="":
        entry.delete(0,END)

    entry.insert(0, all_date)


def bt3():
    global all_date
    all_date = entry.get()
    all_date += "3"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt4():
    global all_date
    all_date = entry.get()
    all_date += "4"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt5():
    global all_date
    all_date = entry.get()
    all_date += "5"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt6():
    global all_date
    all_date = entry.get()
    all_date += "6"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt7():
    global all_date
    all_date = entry.get()
    all_date += "7"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt8():
    global all_date
    all_date = entry.get()
    all_date += "8"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt9():
    global all_date
    all_date = entry.get()
    all_date += "9"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bt0():
    global all_date
    all_date = entry.get()
    all_date += "0"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)
    # 清除




def btf():
    global all_date
    all_date = entry.get()
    all_date += "+"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bte():
    global all_date
    all_date = entry.get()
    all_date += "-"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)

def btg():
    global all_date
    all_date = entry.get()
    all_date += "."

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def btd():
    global all_date
    all_date = entry.get()
    if all_date != "":
        
        b = list(all_date)
        b.pop()
        all_date = ("".join(b))
    
    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def btc():
    global all_date
    all_date = entry.get()
    all_date += "*"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def btb():
    global all_date
    all_date = entry.get()
    all_date += "/"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bta():
    global all_date
    all_date = entry.get()
    all_date = ""

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def bth():
    global all_date
    all_date = entry.get()
    all_date += "*0.01"

    if entry.get() != "":
        entry.delete(0, END)

    entry.insert(0, all_date)


def equal():
    global all_date
    all_date=entry.get()
    if entry.get() != "":
        entry.delete(0, END)
        num = eval(all_date)
        all_date=str(num)
        entry.insert(0, num)

看起来不怎么难对吗?

但是:

no no no不会那么容易理解的


首先每个键按之前,要先把entry里的数字与变量进行统一

也就是为什么有

all_date = entry.get()

然后在输入时要确保输入框内不是空

总之理解难度非常大


最后老规矩,键位以及样式:

# 按钮  不要忘记给按钮绑定函数
btna = Button(root, text='C', font=('黑体', 15), width=6,height=2, bg='LightPink',  command=bta)
btnb = Button(root, text='÷', font=('黑体', 15), width=6, height=2, bg='LightPink',  command=btb)
btnc = Button(root, text='×', font=('黑体', 15), width=6, height=2, bg='LightPink',  command=btc)
btnd = Button(root, text='←', font=('黑体', 15), width=6, height=2, bg='LightPink',  command=btd)
btn7 = Button(root, text='7', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt7)
btn8 = Button(root, text='8', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt8)
btn9 = Button(root, text='9', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt9)
btne = Button(root, text='-', font=('黑体', 15),width=6, height=2, bg='LightPink',  command=bte)
btn4 = Button(root, text='4', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt4)
btn5 = Button(root, text='5', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt5)
btn6 = Button(root, text='6', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt6)
btnf = Button(root, text='+', font=('黑体', 15),width=6, height=2, bg='LightPink',  command=btf)
btn3 = Button(root, text='3', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt3)
btn2 = Button(root, text='2', font=('黑体', 15),width=6, height=2, bg='PowderBlue',command=bt2)
btn1 = Button(root, text='1', font=('黑体', 15), width=6, height=2, bg='PowderBlue',  command=bt1)
btng = Button(root, text='.', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=btg)
btn0 = Button(root, text='0', font=('黑体', 15),width=6, height=2, bg='PowderBlue',  command=bt0)
btnh = Button(root, text='%', font=('黑体', 15), width=6,height=2, bg='PowderBlue',  command=bth)
btni = Button(root, text='=', font=('黑体', 15), width=6, height=6, bg='RoyalBlue', command=equal)

# 按钮——布局
btna.place(x=30, y=120)
btnb.place(x=120, y=120)
btnc.place(x=210, y=120)
btnd.place(x=300, y=120)
btn7.place(x=30, y=200)
btn8.place(x=120, y=200)
btn9.place(x=210, y=200)
btne.place(x=300, y=200)
btn4.place(x=30, y=280)
btn5.place(x=120, y=280)
btn6.place(x=210, y=280)
btnf.place(x=300, y=280)
btn3.place(x=210, y=360)
btn2.place(x=120, y=360)
btn1.place(x=30, y=360)
btng.place(x=30, y=440)
btn0.place(x=120, y=440)
btnh.place(x=210, y=440)
btni.place(x=300, y=360)

root.mainloop()

强迫症很舒服

这样就能做出一个既能按按钮

又能输入的计算器了。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值