Python——二进制4位加法器(采用手算二进制加法的过程实现)(tkinter实现)【2021-07-07】_四位二进制加法器代码_TDTX的博客-程序员秘密

技术标签: tkinter  python  canvas  Python-数学工具集项目  gui  函数式编程  

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_54698498/article/details/118558373

智能推荐

stm32笔记--硬件--GPIO管脚的几种工作模式_pin脚的四种工作模式_夜场工程师的博客-程序员秘密

高阻态高阻态是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,和没接一样。电路分析时可以把高阻态看成开路,即输出(输入)电阻非常大,极限可以认为是悬空。但是理论上高阻态不是悬空,而是对地或者对电源的电阻非常大的状态,实际应用上与引脚悬空是一样的。上图所示为GPIO管脚在高阻态输入模式下的等效结构模式图。Pin表示GPIO管脚,这是一个管脚的情况,其他管脚的结构也是同样的输入模式的结构比较简单,就是一个带有施密特触发输入(Schmitt-triggered inpu...

js 定时器_如何理解JavaScript定时器的4种写法「带面试题讲解」_weixin_39606361的博客-程序员秘密

在JavaScript里,我们已经会使用一些原生提供的方法来实现需要延时执行的操作代码,比如很多在线时钟的制作,图片轮播的实现,还有一些广告弹窗,但凡可以自动执行的东西,都是可以和定时器有关的。今天就来和大家分享一下,关于我们在JavaScript里经常会使用到的定时器方法在JavaScript里,我们要学习四个定时器的使用方法,setTiemout、setInterval、setImmediat...

matlab异步电动机转速,转速闭环恒压频比异步电机调速系统 MatlabSimulink 仿真.pdf..._认识车的博客-程序员秘密

(电力传动调速控制综合实验大作业)转速闭环恒压频比异步电机调速系统Matlab/Simulink 仿真学院/ 系: 电信学院电气工程系姓名: 甘义良学号: 1140319082任课教师: ...

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面_记录bug的假程序员的博客-程序员秘密

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面遇到题目就开始想能不能使用暴力求解,我真的太暴力了。。。本题看了别人的求解思路:利用两个指针,一个从数组头部开始,一个从数组尾部开始。如果前面的指针指向的奇数,那么指针的指向向后移动。如果后面的指针指向的是偶数,后面的指针向前移动。否则交换两个指针所指向的数字的位置。class Solution { //从头遍历到尾部,如果前面的是基数与尾部的交换 public int[] exchange(int[] nums) {

随便推点

Matlab 填补缺失数据_matlab填充数据_流浪猪头拯救地球的博客-程序员秘密

这个函数原理有点类似于中值滤波之类的,小模板取均值来搞的,当然也可以选用其他策略,需要在函数set_Point里面搞。1、全代码:%% 填补 tianchong.mfunction [mat]=tianchong(SST,SST1)%% 这个函数用于对有缺失区域的数据进行填充% 输入:% SST 待填补的灰度矩阵% SST1 模板灰度矩阵% t 可调参数,小模板大小% 输出:% mat 填充之后的灰度矩阵

opencv6.5-imgproc图像处理模块之轮廓_weixin_33995481的博客-程序员秘密

接opencv6.4-imgproc图像处理模块之直方图与模板这部分的《opencv_tutorial》上都是直接上代码,没有原理部分的解释的。十一、轮廓1、图像中找轮廓 /// 转成灰度并模糊化降噪 cvtColor( src, src_gray, CV_BGR2GRAY ); blur( src_gray, src_gray, Size(3,3) ...

记录微信分享功能开发_微信做分享记录功能_姜红杰的博客-程序员秘密

配置微信开发的服务器配置js安全域名(一共可以配置3个)这里使用官方的php js-sdk进行开发(注意此处有坑,如果在前端使用ajax进行调用的话需要按照微信开发文档要求往后台传当前url的值.如果不是则直接用官方的sdk不用修改就可以了),前台使用ajax调用方式的话后端php代码如下:<?phprequire_once "JSSDK.php";//引入官方的sdk$url = @$_P

php文件如何上传到服务器,php文件怎么上传到云服务器_夏虫爱吃冰的博客-程序员秘密

php文件怎么上传到云服务器 内容精选换一换当服务器A和服务器B同时挂载同一文件系统C时,在服务器A上传文件,服务器B同步此文件时存在延时,而单独上传至服务器B则没有延时。需要在两个服务器的挂载参数中增加参数noac,noac表示禁止缓存,强制进行同步写。为了提高性能,NFS客户端缓存文件属性(默认ac),然后每隔一段时间去检查文件属性后更新。在缓存有效期内,客户端不检测服务器上文远程桌面协议(R...

取消鼠标拖动选中文字的方法_如何让鼠标点击选中文字,松开就取消继续选中文字_webmxj的博客-程序员秘密

1、给元素加样式 -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none; 2、ie6-ie9 需要加以下js a.  //不可选中文字 var oDrag = document.getElementsByClassName(“ar

深入研究 Runtime_puyangdev的博客-程序员秘密

1、由objc_msgSend说开去Objective-C 中的方法调用,不是简单的方法调用,而是发送消息,也就是说,其实 [receiver message] 会被编译器转化为: objc_msgSend(receiver, selector),何以证明?新建一个类 MyClass,其.m文件如下:#import "PYClass.h"@implementation PYClass-

推荐文章

热门文章

相关标签