Python——二进制4位加法器(采用手算二进制加法的过程实现)(tkinter实现)【2021-07-07】

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

[功能模块作者]
CSDN用户(TDTX),TDTX主页——负责加法功能
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.结果示例

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值