Python——二进制8位加法器(采用手算二进制加法的过程实现)(tkinter实现)
目录
- 1.add8bit.py
- 2.结果示例
本功能作者:
1.CSDN用户(TDTX),TDTX主页
博客园用户(TDTX),TDTX主页
1.add8bit.py
def add8bit():
import tkinter as tk
wind1=tk.Tk()
wind1.geometry('450x460+800+300')
wind1.title('八位加法器')
def add88bit():
nu1_1=eval(ent8.get()) #获得文本框中的数字存入相应的变量中
nu1_2=eval(ent7.get())
nu1_3=eval(ent6.get())
nu1_4=eval(ent5.get())
nu1_5=eval(ent4.get())
nu1_6=eval(ent3.get())
nu1_7=eval(ent2.get())
nu1_8=eval(ent1.get())
nu2_1=eval(ent16.get())
nu2_2=eval(ent15.get())
nu2_3=eval(ent14.get())
nu2_4=eval(ent13.get())
nu2_5=eval(ent12.get())
nu2_6=eval(ent11.get())
nu2_7=eval(ent10.get())
nu2_8=eval(ent9.get())
nusp1=0 #nusp1~8是结果输出8个框中,每一位上的值
nusp2=0
nusp3=0
nusp4=0
nusp5=0
nusp6=0
nusp7=0
nusp8=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')
if nu1_5+nu2_5+nujw==1:
nusp5=1
nujw=0
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==0:
nusp5=0
nujw=0
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==2:
nusp5=0
nujw=1
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==3:
nusp5=1
nujw=1
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
if nu1_6+nu2_6+nujw==1:
nusp6=1
nujw=0
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==0:
nusp6=0
nujw=0
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==2:
nusp6=0
nujw=1
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==3:
nusp6=1
nujw=1
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
if nu1_7+nu2_7+nujw==1:
nusp7=1
nujw=0
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==0:
nusp7=0
nujw=0
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==2:
nusp7=0
nujw=1
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==3:
nusp7=1
nujw=1
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
if nu1_8+nu2_8+nujw==1:
nusp8=1
nujw=0
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==0:
nusp8=0
nujw=0
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==2:
nusp8=0
nujw=1
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==3:
nusp8=1
nujw=1
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
#下面是将计算结果插入到9个输出文本框中
tx9.insert('insert',nujw)
tx9.insert('insert','\n')
tx10.delete(0.0,'end')
tx11.delete(0.0,'end')
tx12.delete(0.0,'end')
tx10.insert('insert',nu1_8)
tx10.insert('insert',nu1_7)
tx10.insert('insert',nu1_6)
tx10.insert('insert',nu1_5)
tx10.insert('insert',nu1_4)
tx10.insert('insert',nu1_3)
tx10.insert('insert',nu1_2)
tx10.insert('insert',nu1_1)
tx11.insert('insert',nu2_8)
tx11.insert('insert',nu2_7)
tx11.insert('insert',nu2_6)
tx11.insert('insert',nu2_5)
tx11.insert('insert',nu2_4)
tx11.insert('insert',nu2_3)
tx11.insert('insert',nu2_2)
tx11.insert('insert',nu2_1)
tx12.insert('insert',nusp8)
tx12.insert('insert',nusp7)
tx12.insert('insert',nusp6)
tx12.insert('insert',nusp5)
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)
ent5=tk.Entry(wind1,width=3)
ent5.place(x=224,y=60)
ent6=tk.Entry(wind1,width=3)
ent6.place(x=250,y=60)
ent7=tk.Entry(wind1,width=3)
ent7.place(x=276,y=60)
ent8=tk.Entry(wind1,width=3)
ent8.place(x=302,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)
ent9=tk.Entry(wind1,width=3)
ent9.place(x=120,y=120)
ent10=tk.Entry(wind1,width=3)
ent10.place(x=146,y=120)
ent11=tk.Entry(wind1,width=3)
ent11.place(x=172,y=120)
ent12=tk.Entry(wind1,width=3)
ent12.place(x=198,y=120)
ent13=tk.Entry(wind1,width=3)
ent13.place(x=224,y=120)
ent14=tk.Entry(wind1,width=3)
ent14.place(x=250,y=120)
ent15=tk.Entry(wind1,width=3)
ent15.place(x=276,y=120)
ent16=tk.Entry(wind1,width=3)
ent16.place(x=302,y=120)
lb3=tk.Label(wind1,text='-------------------------------------------------------',height=2)
lb3.place(x=90,y=150)
bt1=tk.Button(wind1,text='相加',command=add88bit) #将add88bit()函数绑定到该按钮
bt1.place(x=339,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=302,y=210)
tx2=tk.Text(wind1,width=3,height=10)
tx2.place(x=276,y=210)
tx3=tk.Text(wind1,width=3,height=10)
tx3.place(x=250,y=210)
tx4=tk.Text(wind1,width=3,height=10)
tx4.place(x=224,y=210)
tx5=tk.Text(wind1,width=3,height=10)
tx5.place(x=198,y=210)
tx6=tk.Text(wind1,width=3,height=10)
tx6.place(x=172,y=210)
tx7=tk.Text(wind1,width=3,height=10)
tx7.place(x=146,y=210)
tx8=tk.Text(wind1,width=3,height=10)
tx8.place(x=120,y=210)
tx9=tk.Text(wind1,width=3,height=10,fg='red',bg='yellow')
tx9.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=90,y=360)
lb6=tk.Label(wind1,text='ALU')
lb6.place(x=80,y=390)
lb7=tk.Label(wind1,text='主存')
lb7.place(x=260,y=390)
tx12=tk.Text(wind1,width=12,height=1)
tx12.place(x=100,y=365)
tx10=tk.Text(wind1,width=12,height=1)
tx10.place(x=260,y=345)
tx11=tk.Text(wind1,width=12,height=1)
tx11.place(x=260,y=435)
wind1.mainloop()
2.结果示例
【重新输入数据后,点击“相加”按钮,会先删除示意图框中的内容,再换行输出结果!】