#===================================================================================
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# Datetime时间指定时区

    string start_time_str = "2018-03-21 06:00:00"; DateTime.Parse(start_time_str) // :: 格林威治时间 ...

  2. 深入理解python装饰器

    写在前面,参考文章链接: 1.博客园(https://www.cnblogs.com/everzin/p/8594707.html) 2.公众号文章 装饰器是什么,什么时候会用到装饰器呢? 写代码要遵 ...

  3. net core appsetting配置

    public class BaseController : Controller { protected WLEntity _db; protected ILogger _log; protected ...

  4. Consumer高级特性

    Queue队列的消息一般是按照顺序各个队列依次获取消息,每次获取一个.所以假设有两个队列queue1,queue2,发送的消息为1.2.3.4.5.则默认情况下queue1获取到的消息为1.3.5,q ...

  5. VS2015创建ASP.NET应用程序描述

    你的 ASP.NET 应用程序 恭喜! 你已创建了一个项目 此应用程序包含: 显示“主页”.“关于”和“联系方式”之间的基本导航的示例页 使用 Bootstrap 进行主题定位 身份验证,如果选择此项 ...

  6. #10038.A Horrible Poem

    #10038.A Horrible Poem 题目传送门 思路解析 既然这道题目在hash板块里,那么自然就可以想到用hash做这道题目. 首先我们可以用hash数组存储字符串的前缀的hash值. 因 ...

  7. Python env使用(virtualenv)

    前言 Python 的 virualenv 模块闻名已久,乘着有点时间,学习一下 变更记录 # 19.3.26  创建文章 # 19.3.27  完善文章 正文 安装 pip install virt ...

  8. Linux S和T权限

    S (setuid) 场景: 像修改密码的流程其实就是通过 /usr/bin/passwd 命令对 /etc/passwd进行修改,我们需要修改自己的密码(就是修改/etc/shadow),然而普通用 ...

  9. Django—第三方引用

    索引 一.富文本编辑器 1.1 在Admin中使用 1.2 自定义使用 1.3 显示 二.全文检索 2.1 创建引擎及索引 2.2 使用 三.发送邮件 一.富文本编辑器 借助富文本编辑器,网站的编辑人 ...

  10. spring security 学习一

    1.配置基本的springboot web项目,加入security5依赖,启动项目 浏览器访问,即可出现一个默认的登录页面 2.什么都没有配置 登录页面哪里来的 一般不知从何入手,就看官方文档里是如 ...