Python——二进制8位加法器(采用手算二进制加法的过程实现)(tkinter实现)

本功能作者:
1.CSDN用户(TDTX),TDTX主页
   博客园用户(TDTX),TDTX主页
2.CSDN用户(philo42),philo42主页——负责示意图绘制

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.结果示例

在这里插入图片描述

【重新输入数据后,点击“相加”按钮,会先删除示意图框中的内容,再换行输出结果!】

在这里插入图片描述

posted @ 2021-11-23 17:00  TDTX  阅读(170)  评论(0编辑  收藏  举报