Python——二进制4位加法器(采用手算二进制加法的过程实现)(tkinter实现)
本功能作者:
1.CSDN用户(TDTX),TDTX主页
博客园用户(TDTX),TDTX主页
2.CSDN用户(philo42),philo42主页——负责示意图绘制
1.add4bit.py
def add4bit():
import tkinter as tk
wind1=tk.Tk()
wind1.geometry('350x490+800+300')
wind1.title('四位加法器')
def add44bit():
nu1_1=eval(ent4.get()) #获得文本框中的数字存入相应的变量中
nu1_2=eval(ent3.get())
nu1_3=eval(ent2.get())
nu1_4=eval(ent1.get())
nu2_1=eval(ent8.get())
nu2_2=eval(ent7.get())
nu2_3=eval(ent6.get())
nu2_4=eval(ent5.get())
nusp1=0 #nusp1~4是结果输出4个框中,每一位上的值
nusp2=0
nusp3=0
nusp4=0
nujw=0 #nujw是两个数每一位作二进制加法时,产生的进位值
#下面是手工计算二进制加法的过程实现
if nu1_1+nu2_1+nujw==1:
nusp1=1
nujw=0
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==0:
nusp1=0
nujw=0
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==2:
nusp1=0
nujw=1
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==3:
nusp1=1
nujw=1
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
if nu1_2+nu2_2+nujw==1:
nusp2=1
nujw=0
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==0:
nusp2=0
nujw=0
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==2:
nusp2=0
nujw=1
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==3:
nusp2=1
nujw=1
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
if nu1_3+nu2_3+nujw==1:
nusp3=1
nujw=0
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==0:
nusp3=0
nujw=0
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==2:
nusp3=0
nujw=1
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==3:
nusp3=1
nujw=1
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
if nu1_4+nu2_4+nujw==1:
nusp4=1
nujw=0
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==0:
nusp4=0
nujw=0
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==2:
nusp4=0
nujw=1
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==3:
nusp4=1
nujw=1
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
#下面是将计算结果插入到5个输出文本框中
tx5.insert('insert',nujw)
tx5.insert('insert','\n')
tx10.delete(0.0,'end')
tx11.delete(0.0,'end')
tx12.delete(0.0,'end')
tx10.insert('insert',nu1_4)
tx10.insert('insert',nu1_3)
tx10.insert('insert',nu1_2)
tx10.insert('insert',nu1_1)
tx11.insert('insert',nu2_4)
tx11.insert('insert',nu2_3)
tx11.insert('insert',nu2_2)
tx11.insert('insert',nu2_1)
tx12.insert('insert',nusp4)
tx12.insert('insert',nusp3)
tx12.insert('insert',nusp2)
tx12.insert('insert',nusp1)
#下面是界面上各种组件的生成与排布放置
lb1=tk.Label(wind1,text='输入数字1:',width=10,height=2)
lb1.place(x=100,y=30)
ent1=tk.Entry(wind1,width=3)
ent1.place(x=120,y=60)
ent2=tk.Entry(wind1,width=3)
ent2.place(x=146,y=60)
ent3=tk.Entry(wind1,width=3)
ent3.place(x=172,y=60)
ent4=tk.Entry(wind1,width=3)
ent4.place(x=198,y=60)
lbs=tk.Label(wind1,text='+',font=('Arial', 14))
lbs.place(x=80,y=78)
lb2=tk.Label(wind1,text='输入数字2:',width=10,height=2)
lb2.place(x=100,y=90)
ent5=tk.Entry(wind1,width=3)
ent5.place(x=120,y=120)
ent6=tk.Entry(wind1,width=3)
ent6.place(x=146,y=120)
ent7=tk.Entry(wind1,width=3)
ent7.place(x=172,y=120)
ent8=tk.Entry(wind1,width=3)
ent8.place(x=198,y=120)
lb3=tk.Label(wind1,text='----------------------------------',height=2)
lb3.place(x=60,y=150)
bt1=tk.Button(wind1,text='相加',command=add44bit) #将add44bit()函数绑定到该按钮
bt1.place(x=235,y=78)
lb4=tk.Label(wind1,text='数字1+数字2结果为:')
lb4.place(x=90,y=180)
tx1=tk.Text(wind1,width=3,height=10)
tx1.place(x=198,y=210)
tx2=tk.Text(wind1,width=3,height=10)
tx2.place(x=172,y=210)
tx3=tk.Text(wind1,width=3,height=10)
tx3.place(x=146,y=210)
tx4=tk.Text(wind1,width=3,height=10)
tx4.place(x=120,y=210)
tx5=tk.Text(wind1,width=3,height=10,fg='red',bg='yellow')
tx5.place(x=94,y=210)
#下面是示意图生成的代码,为另一合作的小伙伴所写,CSDN用户(philo42)
canvas=tk.Canvas(wind1,bg='white',height=80,width=250)
line=canvas.create_line(200,20,150,20)
line=canvas.create_line(170,20,180,15)#箭头
line=canvas.create_line(170,20,180,25)#箭头
rect=canvas.create_rectangle(200,10,200+40,10+20)
line=canvas.create_line(200,60,150,60)
line=canvas.create_line(170,60,180,55)#箭头
line=canvas.create_line(170,60,180,65)#箭头
rect=canvas.create_rectangle(200,50,200+40,50+20)
line=canvas.create_line(150,20,150,60)
line=canvas.create_line(150,40,80,40)
line=canvas.create_line(125,40,135,35)#箭头
line=canvas.create_line(125,40,135,45)#箭头
rect=canvas.create_rectangle(30,30,30+50,30+20)
canvas.place(x=60,y=370)
lb6=tk.Label(wind1,text='ALU')
lb6.place(x=50,y=400)
lb7=tk.Label(wind1,text='主存')
lb7.place(x=230,y=400)
tx12=tk.Text(wind1,width=12,height=1)
tx12.place(x=70,y=375)
tx10=tk.Text(wind1,width=12,height=1)
tx10.place(x=230,y=360)
tx11=tk.Text(wind1,width=12,height=1)
tx11.place(x=230,y=445)
wind1.mainloop()
2.结果示例
【重新输入数据后,点击“相加”按钮,会先删除示意图框中的内容,再换行输出结果!】