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

一样的开头:
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()
强迫症很舒服
这样就能做出一个既能按按钮
又能输入的计算器了。。
本文介绍了如何在Python中制作一个带有输入框的计算器。通过使用Entry组件替换简单计算器的显示方式,使得用户可以直接输入数值。实现过程中涉及将Entry中的数字与变量同步,并确保输入框非空等操作,虽然看似简单,但理解起来具有一定挑战。最后,调整键位和样式,完成一个既可按键又可手动输入的计算器应用。
1305

被折叠的 条评论
为什么被折叠?



