#===================================================================================
import tkinter
import math
#===================================================================================
root = tkinter.Tk() #创建一个窗体
root.minsize(320,440) #大小尺寸
root.title('NEO-Karl的计算器')
shownum = tkinter.StringVar()
shownum.set(0)
# ===================================================================================
numstrlist=[]#存储数字 符号
isjisuan=False#运算标志
#==================================================================
#数据触发事件
#==================================================================
def pressnum(num):#按下数字
global isjisuan
if isjisuan==True:
shownum.set('')
isjisuan=False
oldnum=shownum.get()
if oldnum=='':#旧数字是否为0
shownum.set(num)
else:
if num =='+/-':
if oldnum.startswith('-'):
shownum.set(oldnum[1:])
else:
shownum.set('-'+oldnum)
else:
shownum.set(oldnum+num)
#==================================================================
#该函数主要实现数据加减符号的操作
#==================================================================
def presssign(sign):#按下加减符号
global numsrtlist
global isjisuan
oldnum=shownum.get()
numstrlist.append(oldnum)
numstrlist.append(sign)
isjisuan=True
print(numstrlist)
#==================================================================
#该函数主要实现计算器的等的操作符
#==================================================================
def equal(sign):
global numstrlist
if sign=='=':
oldnum =shownum.get()
numstrlist.append(oldnum)
print(numstrlist)
resu1 =''.join(numstrlist)
result =eval(resu1)
print(result)
shownum.set(result)
numstrlist.clear()
if sign =='1/x':
oldnum = shownum.get()
result =1/float(oldnum)
print(result)
shownum.set(result)
if sign =='√':
oldnum = shownum.get()
result = math.sqrt(float(oldnum))
print(result)
shownum.set(result)
#==================================================================
#该函数主要实现的是数据的清空操作
#==================================================================
def gui0(): #清空数据
global numstrlist
global isjisuan
numstrlist.clear()
isjisuan=False
shownum.set(0)
# ===================================================================================
#文本框输入
# ===================================================================================
label=tkinter.Label(root,textvariable=shownum,bg='gray',font=('宋体',20),anchor='e',bd=5,fg='gold')
label.place(x=20,y=10,width=280,height=50)
# ===================================================================================
#第一行
# ===================================================================================
btn1 =tkinter.Button(text ='MC',bg='#988',bd=2)#Memory Clear 清除存储器中的数值
btn1.place(x=10,y =70,width =50,height=50)
btn2 =tkinter.Button(text ='MR',bg='#988',bd=2)#Memory Read 存储器读出
btn2.place(x=70,y =70,width =50,height=50)
btn3 =tkinter.Button(text ='MS',bg='#988',bd=2)#Memory Save 存入存储器
btn3.place(x=130,y =70,width =50,height=50)
btn4 =tkinter.Button(text ='M+',bg='#988',bd=2)#Memory Plus 将数值与存储器中的数值相加
btn4.place(x=190,y =70,width =50,height=50)
btn5 =tkinter.Button(text ='M-',bg='#988',bd=2)
btn5.place(x=250,y =70,width =50,height=50)
# ===================================================================================
#第二行
# ===================================================================================
btn2_1 =tkinter.Button(text ='del',bg='#988',bd=3)
btn2_1.place(x=10,y =130,width =50,height=50)
btn2_2 =tkinter.Button(text ='CE',bg='#988',bd=3,command=lambda:gui0())#CE是清除全部数字,但不影响以前的计算
btn2_2.place(x=70,y =130,width =50,height=50)
btn2_3 =tkinter.Button(text ='C',bg='#988',bd=3,command=lambda:gui0())#C健是重新开始计算,和ESC键是一样的功能
btn2_3.place(x=130,y =130,width =50,height=50)
btn2_4 =tkinter.Button(text ='+/-',bg='#988',bd=3,command=lambda:pressnum('+/-'))
btn2_4.place(x=190,y =130,width =50,height=50)
btn2_5 =tkinter.Button(text ='√',bg='#988',bd=3,command=lambda:equal('√'))#--------√开平方
btn2_5.place(x=250,y =130,width =50,height=50)
# ===================================================================================
#第三行
# ===================================================================================
btn3_1 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn3_1.place(x=10,y =190,width =50,height=50,)
btn3_2 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn3_2.place(x=70,y =190,width =50,height=50)
btn3_3 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn3_3.place(x=130,y =190,width =50,height=50)
btn3_4 =tkinter.Button(text ='/',bg='#708069',command=lambda:presssign('/'))
btn3_4.place(x=190,y =190,width =50,height=50)
btn3_5 =tkinter.Button(text ='%',bg='#708069',command=lambda:presssign('%'))
btn3_5.place(x=250,y =190,width =50,height=50)
# ===================================================================================
#第四行
# ===================================================================================
btn4_1 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn4_1.place(x=10,y =250,width =50,height=50)
btn4_2 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn4_2.place(x=70,y =250,width =50,height=50)
btn4_3 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn4_3.place(x=130,y =250,width =50,height=50)
btn4_4 =tkinter.Button(text ='*',bg='#708069',command=lambda:presssign('*'))
btn4_4.place(x=190,y =250,width =50,height=50)
btn4_5 =tkinter.Button(text ='1/x',bg='#708069',command=lambda:equal('1/x'))#倒数
btn4_5.place(x=250,y =250,width =50,height=50)
# ===================================================================================
#第五行
# ===================================================================================
btn5_1 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn5_1.place(x=10,y =310,width =50,height=50)
btn5_2 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn5_2.place(x=70,y =310,width =50,height=50)
btn5_3 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn5_3.place(x=130,y =310,width =50,height=50)
btn5_4 =tkinter.Button(text ='-',bg='#708069',command=lambda:presssign('-'))
btn5_4.place(x=190,y =310,width =50,height=50)
btn5_5 =tkinter.Button(text ='=',bg='#708069',command=lambda:equal('='))
btn5_5.place(x=250,y =310,width =50,height=110)
# ===================================================================================
#第六行
# ===================================================================================
btn6_1 =tkinter.Button(text ='',bg='#aaaaaa',bd=3,command=lambda:pressnum(''))
btn6_1.place(x=10,y =370,width =110,height=50)
btn6_3 =tkinter.Button(text ='.',bg='#708069',command=lambda:pressnum('.'))
btn6_3.place(x=130,y =370,width =50,height=50)
btn6_4 =tkinter.Button(text ='+',bg='#708069',command=lambda:presssign('+'))
btn6_4.place(x=190,y =370,width =50,height=50)
# ===================================================================================
root.mainloop()
# ===================================================================================

Python+Tkinter 实现计算器功能的更多相关文章

  1. python 实现一个计算器功能

    #s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' #第 ...

  2. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  3. 利用PYTHON设计计算器功能

    通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...

  4. python 编程之计算器

    作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后 ...

  5. 如何用Python写一个计算器软件 附带效果图

    该计算器使用Python  tkinter模块开发 效果如下图 import tkinter #导入tkinter模块 root = tkinter.Tk() root.minsize(280,500 ...

  6. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  7. javaWeb 使用 jsp 和 javaBean 实现计算器功能

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. C#实现按键计算器功能

    C#实现按键计算器功能 (一次失败的编程) 界面: 代码如下: using System; using System.Collections.Generic; using System.Compone ...

  9. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

随机推荐

  1. 【转载】C++ STL快速入门

    https://www.cnblogs.com/skyfsm/p/6934246.html

  2. jmeter中的参数化

    1.那些场景需要参数化? 1.登陆认证信息 2.一些和时间相关的,违反时间约束的[时间点和当前时间不一致的情况等等] 3.一些受其他字段约束的[例如字段的一些限制条件] 4.一些来自于其他数据源[例如 ...

  3. IO流的操作规律。

    1.  明确源和目的 源代表输入流: InputStream, Reader 目的代表输出流: OutputStream, Writer 2. 操作数据是否纯文本 纯文本:字符流 非纯文本: 字节流 ...

  4. github 远程库

    一.在 Github 创建 django 项目时:先在本地创建项目,然后设置为本地仓库,再与远程仓库关联 在 Git Bash 进入django项目目录,输入命令git init,此时这个目录变成Gi ...

  5. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比

    上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...

  6. sonar6.7.2启动报错

    sonar6.7.2启动报错:错误信息如下: es.log java.lang.RuntimeException: can not run elasticsearch as rootsonar.log ...

  7. 贯穿RobotFramework框架 - 关键字(一) 最全面的疏理

    在RF中,关键字是一个非常重要的存在.想做任何事情,都是通过关键字来实现的. 这篇文章对RobotFramework中的关键字做个整理.大概分为以下几点内容: 1.什么是关键字 2.关键字来自哪里.有 ...

  8. 2018-2019-1-20165221&20165225 《信息安全系统设计》实验五:通讯协议设计

    2018-2019-1-20165221&20165225 <信息安全系统设计>-实验五:通讯协议设计 OpenSSL学习: 简介: OpenSSL是为网络通信提供安全及数据完整性 ...

  9. 借助 LVS + Keepalived 实现负载均衡

    虽然现在云手段很高明了.但是这个lvs + keepalive 还是需要了解下的. 今天就整理了下lvs和keepalive的东西.做下总结留作以后怀念 在实际应用中,在Web服务器集群之前总会有一台 ...

  10. 【Flask】报错解决方法:AssertionError: View function mapping is overwriting an existing endpoint function: main.user

    运行Flask时出现了一个错误, AssertionError: View function mapping is overwriting an existing endpoint function: ...