电子计算器

from tkinter import *
def frame(master):
    # 将共同属性作为默认值,以简化Frame创建过程
    w = Frame(master)
    w.pack(side=TOP,expand=YES,fill=BOTH)
    return w
def btn(master,text,command):
    # 提取共同属性作为默认值,使Button创建过程简化
    w = Button(master,text=text,command=command,width=6)
    w.pack(side=LEFT,expand=YES,fill=BOTH,padx=2,pady=2)
    return w
def calc(text_data):
    # 用eval方法计算表达式字符串
    try:
        if (separator_flag.get() == 0):
            return eval(del_separator(text_data))
        else:
            return add_separator(str(eval(del_separator(text_data))))
    except(SyntaxError,ZeroDivisionError,NameError):
        return "Error"
def back(text_data):
    # 将text_data最末的字符删除并返回
    if len(text_data) > 0:
        return text_data[:-1]
    else:
        return text_data
def add_separator(text_data):
    dot_index = text_data.find(".")
    if dot_index > 0:
        text_head = text_data[:dot_index]
        text_tail = text_data[dot_index:]
    elif dot_index < 0:
        text_head = text_data
        text_tail = ""
    else:
        text_head = ""
        text_tail = text_data
    list_ = [char for char in text_head]
    length = len(list_)
    tmp_index = 3
    while length - tmp_index > 0:
        list_.insert(length - tmp_index,",")
        tmp_index += 3
    list_.extend(text_tail)
    new_text = ""
    for char in list_:
        new_text += char
    return new_text
def del_separator(text_data):
    # 删除字符串中所有的千位分隔符
    return text_data.replace(",","")
# 开始界面的实现
init_root = Tk()
init_root.wm_resizable(width=False,height=False)
init_root.title("计算器(calculator)")
main_menus = Menu()
# 创建计算器菜单,并加入到主菜单
calc_menu = Menu(main_menus,tearoff=0)
calc_menu.add_command(label="退出",command=lambda:exit())
main_menus.add_cascade(label="菜单",menu=calc_menu)
text = StringVar()
separator_flag = IntVar()
separator_flag.set(0)
view_menu = Menu(main_menus,tearoff=0)
init_root["menu"] = main_menus # 将主菜单与root绑定
# 创建文本框
Entry(init_root,textvariable=text).pack(expand=YES,fill=BOTH,padx=2,pady=4)
# 创建第一行三个按钮
first_line = frame(init_root)
btn(first_line,"回退",lambda t=text:t.set(back(t.get())))
btn(first_line,"清空",lambda t=text:t.set(""))
# 每行四个,创建其余四行按钮
for key in ("789/","456*","123-","0.=+"):
    others = frame(init_root)
    for char in key:
        if char == "=":
            btn(others,char,lambda data=text:data.set(calc(data.get())))
        else:
            btn(others,char,lambda data=text,c=char:data.set(data.get() + c))
if __name__ == "__main__":
    init_root.mainloop()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.方程式 支持一元二次,一元一次,二元一次方程求值.支持正负数,小数系数输入,分数系数请先自行转换. 2.RC常数 RC时间常数是电路里经常用到的.该功能可以计算RC电路上,电容C到某个电压时候的充放电时间;也可以计算经过t时刻,电容C两端的电压值. 3.电阻串并联 并联公式R=R1//R2.输入R1和R2,点击,得到R,R将显示在原先R1中.若需要继续并联,在R2中继续输入,再点击.例如需要计算100R//50R//10R,先在R1,R2中分别输入100和50,点击,再在R2中输入10,再点击即可. 4.反向串并联 支持标准E24,E96和非标准的电阻值反向串/并联计算.在R0中填入目标值,勾选,填写误差范围(20%内),并选择E24或者E96,点击或者即可求得计算结果.如果勾选填写相应阻值,再进行计算,则可以计算出非标准阻值R2',此方法计算结果精度最高(不勾选);若同时选择和,计算得到的R2是最接近R2'的标准阻值.由于E24和E96的电阻范围有些不同,如果计算得不到结果,请更改选项或者加大误差范围重新计算. 5.色环电阻识别 支持市面常见4,5环电阻.选择相应颜色,点击,所得阻值即可显示.若需要从已知阻值反向查找对应色环颜色,请勾选(只支持5环电阻),输入正确数值,点击,即可查看对应色环(因一种阻值可能对应多种色环表示,因此该功能计算所得色环仅供参考). 6.变压器计算 来自AV-RGB网友发布的多种变压器计算方法,支持EI型,C型,环型变压器的估算.特此鸣谢! 7.LM317稳压 支持LM317,LM337,LM350等常见三端稳压参考阻值和输出电压计算.具体请参考相关文档说明.若需要计算R2,点选,输入R1和Vout,点击;若需要求输出电压,点选,输入R1和R2,再.三端稳压器件一般输入电压是36V以内,输入输出压差大于3V为宜,低压差的器件请参考相应文档.当LM317作为恒流源时,可以输出最大1.5A电流,勾选,填入目标电流,即可求出相应阻值. 8.TL431参考 TL431精密参考电压常用电路阻值和输出电压计算.方法类似LM317,但需要填写输入电压Vin.若需要求Irb时,请勾选,并输入Rb.其他信息请参考页面提示和其他相关文档. 9.RC无源滤波 RC无源滤波电路的简单计算.可以从R,C算F;也可以R,F算C;F,C算R.RC无源滤波的计算方法对高低通都适用,只是电路形式不同.如果需要二阶电路,可以在示意图的基础上再往后加一个类似电路即可. 10.有源二阶滤波 这是常用的2阶滤波电路,支持高低通,巴特沃斯和贝塞尔算法.可以从R,C求F(勾选);也可以从F,R(或C)求C(或R).选择相应的功能,并正确填写相关参数(均需要大于0),点击即可. 11.差分二阶LPF 这个电路常用于差分输出的DAC的LPF电路(默认使用最佳Q值计算).使用方法请参考第6点. 12.多层电感 此功能用于空心多层电感的估算(如音箱分频器的空心电感).只需输入所要的电感量和直流电阻(直流电阻一般可取电感所接负载的0.1-0.2左右),然后点击即可.计算所得参数可以作为绕制电感的依据.据资料说明,此方法绕制所得线圈电感量和目标电感量误差在5%内. 13.环型变压器 该功能可求出已知铁芯功率,初、次级匝数比,初级线径等.你只需要量出该铁芯内外直径,和高度,以及厂方给出的磁通密度(一般为14000-16000左右);无断带焊点的铁心叠片系数一般取0.96,差些的可以降低该值;电流密度如果是长时间工作的一般取2-2.5,间歇工作的可取3-3.5;铁芯系列可选填.然后点击即可.计算所得线径未包含漆皮.次级匝数比已经包含电压调整率,次级匝数=次级匝数比x次级电压.注意,次级总功率不得大于额定功率. 14.EI变压器 如果要设计一款小于1000W的EI变压器,可以利用已知的次级交流电压和电流参数进行计算.其中初级补偿系数和次级补偿系数通常取1-1.3之间,取值越大,变压器余量越大;P修正系数通常根据硅钢片的质量进行设定,质量好的可取得小些.电流密度通常取2-3.5之间,连续工作时间越长,取值越小;硅钢片舌宽根据所选硅钢片规格填入,通常取硅钢片叠厚=1.5X硅钢片舌宽,尽量使计算结果的硅钢片叠厚接近硅钢片舌宽(改变硅钢片舌宽参数,并重新计算即可),这样设计的变压器效果最佳.磁通密度也是根据所选硅钢片填写,通常D310型12000-14000Gs;D41,D42型10000-12000Gs;D43型11000-12000Gs;D21,D22型5000-7000Gs.此计算方法参考1976年6月上海人民出版社《怎样绕变压器》. 15.密闭音箱 该功能可以根据低音喇叭单元的常用参数,计算出适合的密闭箱体体积,和示例箱体外尺寸(如果板厚=0,则计算箱体内容积).其中,箱体共振频率是你希望音箱所能发出的最低频率,可以根据需求自己填入合适的值,以得到最佳箱体尺寸(计算结果使得箱体Q值=0.7为宜).计算所得示例箱体尺寸若不合要求,可更改比例选项重新计算.计算结果仅供参考.具体成箱还需自行测试调整. 16.倒相音箱 该功能可以根据低音喇叭单元的常用参数,计算出适合的倒相箱体体积,和示例箱体外尺寸(如果板厚=0,则计算箱体内容积),和倒相孔长度以及其他一些参数.其中,倒相孔宽是倒相孔直径.倒相孔面积一般不小于单元有效振动面积的10%.如果勾选则按照最平响应进行箱体计算.计算所得示例箱体尺寸若不合要求,可更改比例选项重新计算.倒相箱体调试比较繁琐,计算结果仅供参考,具体成箱还需自行测试调整. 17.二分频 采用巴特沃斯分频网络设计算法,特点为瞬态响应好,频率特性曲线平坦.分频点阻抗为实测的高,低音喇叭在分频点处的实际阻抗,而非喇叭单元的额定阻抗.当需要在分频器添加补偿网络时,由于补偿网络的加入会使综合特性参数发生改变,故此请先行设计好补偿网络,再进行分频网络设计.即输入的分频点阻抗是加有补偿网络后实测分频点处的阻抗.其中 -12dB-3 是按照-3dB降落交叉点来计算,可能会在分频点处隆起一个小峰. -12dB-6 是按照-6dB降落交叉点计算,会得到比较平坦曲线. 18.三分频 功能同二分频.分频点阻抗为实测的高,中,低音喇叭在分频点处的实际阻抗,而非喇叭单元的额定阻抗.当需要在分频器添加补偿网络时,由于补偿网络的加入会使综合特性参数发生改变,故此请先行设计好补偿网络,再进行分频网络设计.即输入的分频点阻抗是加有补偿网络后实测分频点处的阻抗. 19.分频网络的阻抗补偿和音量衰减 阻抗补偿功能主要针对阻抗曲线上高频段的阻抗补偿.因为喇叭音圈的电感随频率上升而增加,所以高频段阻抗随频率升高而增大.因此,可以在喇叭单元两端并联一个由电容C和电阻R组成的串联谐振回路对这个区域的阻抗进行补偿修正.该计算功能需要用到喇叭单元的阻抗曲线.请按照单元阻抗曲线上的阻抗点填入相对对应的频率才能正确计算. 衰减网络通常用于高音单元,因为高音单元灵敏度通常比低音高,所以需要进行一定量的衰减.衰减音量通常取高音单元灵敏度-低音单元灵敏度,得出计算结果后,根据实际听感再进行细微调整. 电压与分贝换算,在输入框中输入已知数值,并将鼠标焦点移到其他地方(也就是在其他输入框上单击鼠标左键),即可计算出电压和分贝之间关系. 20.载流计算 可以计算PCB走线的载流,也可以计算铜线、铝线的最大载流.计算PCB时,需要选择布线层在表面(外层)还是内层,外层允许载流约为内层2倍.如果线长度为0,则无法计算导线电阻和导线上的压降. 单位换算功能,只需在某个输入框中输入已知数值,并将鼠标焦点移到其他地方(也就是在其他输入框单击鼠标左键),即可计算相应其他单位数值. 21.整流滤波 计算常用单相半波、全波、桥式整流电路在整流以及电容滤波后的空载和负载电压,估算滤波电容容量和耐压值,整流二极管的平均电流以及最大反向电压.若已知负载的电流,勾选并填写相应值即可. 22.级进电位器 用波段开关制作音量电位器的试算.有两种模式可选-Ladder Type和Serial Type.其中Ladder Type的优点是声音路径只经过两颗电阻,减少杂音;但缺点为输入阻抗有些许波动且成本较高.Serial Type优点是输入阻抗稳定且成本较低;缺点是声音路径经过较多电阻,杂音较高.通常计算使用默认的参数即可.若衰减量比较大,应增加阻值,以取得比较正确计算结果.级数一般用23,且注意大于2,小于100.点击可以查看图示,并可参考详细制作的相关网页. 注:快捷键F12可调用Windows自带计算器.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值