import tkinter

import math

import tkinter.messagebox

class calculator:

#界面布局方法

def __init__(self):

#创建主界面,并且保存到成员属性中

self.root = tkinter.Tk()

self.root.minsize(280, 450)

self.root.maxsize(280, 470)

self.root.title('小餅餅丶的简易计算器1.0')

# 设置显式面板的变量

self.result = tkinter.StringVar()

self.result.set(0)

# 设置一个全局变量 运算数字和f符号的列表

self.lists = []

# 添加一个用于判断是否按下运算符号的标志

self.ispresssign = False

# 界面布局

self.menus()

self.layout()

self.root.mainloop()

#计算器菜单界面摆放

def menus(self):

# 添加菜单

# 创建总菜单

allmenu = tkinter.Menu(self.root)

# 添加子菜单

filemenu = tkinter.Menu(allmenu, tearoff=0)

# 添加选项卡

filemenu.add_command(label='标准型(T) Alt+1', command=self.myfunc)

filemenu.add_command(label='科学型(S) Alt+2', command=self.myfunc)

filemenu.add_command(label='程序员(P) Alt+3', command=self.myfunc)

filemenu.add_command(label='统计信息(A) Alt+4', command=self.myfunc)

# 添加分割线

filemenu.add_separator()

# 添加选项卡

filemenu.add_command(label='历史记录(Y) Ctrl+H', command=self.myfunc)

filemenu.add_command(label='数字分组(I)', command=self.myfunc)

# 添加分割线

filemenu.add_separator()

# 添加选项卡

filemenu.add_command(label='基本(B) Ctrl+F4', command=self.myfunc)

filemenu.add_command(label='单位转换(U) Ctrl+U', command=self.myfunc)

filemenu.add_command(label='日期计算(D) Ctrl+E', command=self.myfunc)

menu1 = tkinter.Menu(filemenu, tearoff=0)

menu1.add_command(label='抵押(M)', command=self.myfunc)

menu1.add_command(label='汽车租赁(V)', command=self.myfunc)

menu1.add_command(label='油耗(mpg)(F)', command=self.myfunc)

menu1.add_command(label='油耗(l/100km)(U)', command=self.myfunc)

filemenu.add_cascade(label='工作表(W)', menu=menu1)

allmenu.add_cascade(label='查看(V)', menu=filemenu)

# 添加子菜单2

editmenu = tkinter.Menu(allmenu, tearoff=0)

# 添加选项卡

editmenu.add_command(label='复制(C) Ctrl+C', command=self.myfunc)

editmenu.add_command(label='粘贴(V) Ctrl+V', command=self.myfunc)

# 添加分割线

editmenu.add_separator()

# 添加选项卡

menu2 = tkinter.Menu(filemenu, tearoff=0)

menu2.add_command(label='复制历史记录(I)', command=self.myfunc)

menu2.add_command(label='编辑(E) F2', command=self.myfunc)

menu2.add_command(label='取消编辑(N) Esc', command=self.myfunc)

menu2.add_command(label='清除(L) Ctrl+Shift+D', command=self.myfunc)

editmenu.add_cascade(label='历史记录(H)', menu=menu2)

allmenu.add_cascade(label='编辑(E)', menu=editmenu)

# 添加子菜单3

helpmenu = tkinter.Menu(allmenu, tearoff=0)

# 添加选项卡

helpmenu.add_command(label='查看帮助(V) F1', command=self.myfunc)

# 添加分割线

helpmenu.add_separator()

# 添加选项卡

helpmenu.add_command(label='关于计算器(A)', command=self.myfunc)

allmenu.add_cascade(label='帮助(H)', menu=helpmenu)

self.root.config(menu=allmenu)

#计算器主界面摆放

def layout(self):

# 显示屏

result = tkinter.StringVar()

result.set(0)

show_label = tkinter.Label(self.root, bd=3, bg='white', font=('宋体', 30), anchor='e', textvariable=self.result)

show_label.place(x=5, y=20, width=270, height=70)

# 功能按钮MC

button_mc = tkinter.Button(self.root, text='MC', command=self.wait)

button_mc.place(x=5, y=95, width=50, height=50)

# 功能按钮MR

button_mr = tkinter.Button(self.root, text='MR', command=self.wait)

button_mr.place(x=60, y=95, width=50, height=50)

# 功能按钮MS

button_ms = tkinter.Button(self.root, text='MS', command=self.wait)

button_ms.place(x=115, y=95, width=50, height=50)

# 功能按钮M+

button_mjia = tkinter.Button(self.root, text='M+', command=self.wait)

button_mjia.place(x=170, y=95, width=50, height=50)

# 功能按钮M-

button_mjian = tkinter.Button(self.root, text='M-', command=self.wait)

button_mjian.place(x=225, y=95, width=50, height=50)

# 功能按钮←

button_zuo = tkinter.Button(self.root, text='←', command=self.dele_one)

button_zuo.place(x=5, y=150, width=50, height=50)

# 功能按钮CE

button_ce = tkinter.Button(self.root, text='CE', command=lambda: self.result.set(0))

button_ce.place(x=60, y=150, width=50, height=50)

# 功能按钮C

button_c = tkinter.Button(self.root, text='C', command=self.sweeppress)

button_c.place(x=115, y=150, width=50, height=50)

# 功能按钮±

button_zf = tkinter.Button(self.root, text='±', command=self.zf)

button_zf.place(x=170, y=150, width=50, height=50)

# 功能按钮√

button_kpf = tkinter.Button(self.root, text='√', command=self.kpf)

button_kpf.place(x=225, y=150, width=50, height=50)

# 数字按钮7

button_7 = tkinter.Button(self.root, text='7', command=lambda: self.pressnum('7'))

button_7.place(x=5, y=205, width=50, height=50)

# 数字按钮8

button_8 = tkinter.Button(self.root, text='8', command=lambda: self.pressnum('8'))

button_8.place(x=60, y=205, width=50, height=50)

# 数字按钮9

button_9 = tkinter.Button(self.root, text='9', command=lambda: self.pressnum('9'))

button_9.place(x=115, y=205, width=50, height=50)

# 功能按钮/

button_division = tkinter.Button(self.root, text='/', command=lambda: self.presscalculate('/'))

button_division.place(x=170, y=205, width=50, height=50)

# 功能按钮%

button_remainder = tkinter.Button(self.root, text='//', command=lambda:self.presscalculate('//'))

button_remainder.place(x=225, y=205, width=50, height=50)

# 数字按钮4

button_4 = tkinter.Button(self.root, text='4', command=lambda: self.pressnum('4'))

button_4.place(x=5, y=260, width=50, height=50)

# 数字按钮5

button_5 = tkinter.Button(self.root, text='5', command=lambda: self.pressnum('5'))

button_5.place(x=60, y=260, width=50, height=50)

# 数字按钮6

button_6 = tkinter.Button(self.root, text='6', command=lambda: self.pressnum('6'))

button_6.place(x=115, y=260, width=50, height=50)

# 功能按钮*

button_multiplication = tkinter.Button(self.root, text='*', command=lambda: self.presscalculate('*'))

button_multiplication.place(x=170, y=260, width=50, height=50)

# 功能按钮1/x

button_reciprocal = tkinter.Button(self.root, text='1/x', command=self.ds)

button_reciprocal.place(x=225, y=260, width=50, height=50)

# 数字按钮1

button_1 = tkinter.Button(self.root, text='1', command=lambda: self.pressnum('1'))

button_1.place(x=5, y=315, width=50, height=50)

# 数字按钮2

button_2 = tkinter.Button(self.root, text='2', command=lambda: self.pressnum('2'))

button_2.place(x=60, y=315, width=50, height=50)

# 数字按钮3

button_3 = tkinter.Button(self.root, text='3', command=lambda: self.pressnum('3'))

button_3.place(x=115, y=315, width=50, height=50)

# 功能按钮-

button_subtraction = tkinter.Button(self.root, text='-', command=lambda: self.presscalculate('-'))

button_subtraction.place(x=170, y=315, width=50, height=50)

# 功能按钮=

button_equal = tkinter.Button(self.root, text='=', command=lambda: self.pressequal())

button_equal.place(x=225, y=315, width=50, height=105)

# 数字按钮0

button_0 = tkinter.Button(self.root, text='0', command=lambda: self.pressnum('0'))

button_0.place(x=5, y=370, width=105, height=50)

# 功能按钮.

button_point = tkinter.Button(self.root, text='.', command=lambda: self.pressnum('.'))

button_point.place(x=115, y=370, width=50, height=50)

# 功能按钮+

button_plus = tkinter.Button(self.root, text='+', command=lambda: self.presscalculate('+'))

button_plus.place(x=170, y=370, width=50, height=50)

#计算器菜单功能

def myfunc(self):

tkinter.messagebox.showinfo('','程序员懒死在电脑前,打死也做不出的功能,只是装饰而已~')

#数字方法

def pressnum(self,num):

# 全局化变量

# 判断是否按下了运算符号

if self.ispresssign == False:

pass

else:

self.result.set(0)

# 重置运算符号的状态

self.ispresssign = False

if num == '.':

num = '0.'

# 获取面板中的原有数字

oldnum = self.result.get()

# 判断界面数字是否为0

if oldnum == '0':

self.result.set(num)

else:

# 连接上新按下的数字

newnum = oldnum + num

# 将按下的数字写到面板中

self.result.set(newnum)

#运算函数

def presscalculate(self,sign):

# 保存已经按下的数字和运算符号

# 获取界面数字

num = self.result.get()

self.lists.append(num)

# 保存按下的操作符号

self.lists.append(sign)

# 设置运算符号为按下状态

self.ispresssign = True

#获取运算结果

def pressequal(self):

# 获取所有的列表中的内容(之前的数字和操作)

# 获取当前界面上的数字

curnum = self.result.get()

# 将当前界面的数字存入列表

self.lists.append(curnum)

# 将列表转化为字符串

calculatestr = ''.join(self.lists)

# 使用eval执行字符串中的运算即可

endnum = eval(calculatestr)

# 将运算结果显示在界面中

self.result.set(str(endnum)[:10])

if self.lists != 0:

self.ispresssign = True

# 清空运算列表

self.lists.clear()

#暂未开发说明

def wait(self):

tkinter.messagebox.showinfo('','功能在努力的实现,请期待2.0版本的更新')

#←按键功能

def dele_one(self):

if self.result.get() == '' or self.result.get() == '0':

self.result.set('0')

return

else:

num = len(self.result.get())

if num > 1:

strnum = self.result.get()

strnum = strnum[0:num - 1]

self.result.set(strnum)

else:

self.result.set('0')

#±按键功能

def zf(self):

strnum = self.result.get()

if strnum[0] == '-':

self.result.set(strnum[1:])

elif strnum[0] != '-' and strnum != '0':

self.result.set('-' + strnum)

#1/x按键功能

def ds(self):

dsnum = 1 / int(self.result.get())

self.result.set(str(dsnum)[:10])

if self.lists != 0:

self.ispresssign = True

# 清空运算列表

self.lists.clear()

#C按键功能

def sweeppress(self):

self.lists.clear()

self.result.set(0)

#√按键功能

def kpf(self):

strnum = float(self.result.get())

endnum = math.sqrt(strnum)

if str(endnum)[-1] == '0':

self.result.set(str(endnum)[:-2])

else:

self.result.set(str(endnum)[:10])

if self.lists != 0:

self.ispresssign = True

# 清空运算列表

self.lists.clear()

#实例化对象

mycalculator = calculator()

python tkinter计算器实例_python学习——tkinter实战(计算器)相关推荐

  1. python人工智能课程实例_python人工智能AI深度学习/机器学习全套课程 视频教程+ppt+代码...

    这是一套Python/人工智能/AI/机器学习/深度学习 全套实战课程,包含视频教程以及文档.源码等,欢迎下载 01. python数据分析与机器学习实战 02.深度学习入门视频课程(上篇) 03.深 ...

  2. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例

    Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...

  3. python tkinter计算器实例_Python编程使用tkinter模块实现计算器软件完整代码示例

    Python 提供了多个图形开发界面的库.Tkinter就是其中之一. Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数 ...

  4. python tkinter计算器实例_python库的tkinter带你进入GUI世界(计算器简单功能)

    #tkinter应用案例:设计一个简单计算器界面功能 from tkinter import * import tkinter as tk master = Tk() master.title(&qu ...

  5. python tkinter计算器实例_利用Tkinter(python3.6)实现一个简单计算器

    前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起 ...

  6. pythonhelloworld实例_Python基于Tkinter的HelloWorld入门实例

    本文实例讲述了Python基于Tkinter的HelloWorld入门实例.分享给大家供大家参考.具体分析如下: 初学Python,打算做几个Tkinter的应用来提高. 刚学的HelloWorld, ...

  7. python tkinter怎么安装_Python的Tkinter库的安装

    在FCN代码中运行infer.py时出现如下错误: File "infer.py", line 4, in import matplotlib.pyplot as plt File ...

  8. python接口脚本实例_python图形用户接口实例详解

    本文实例为大家分享了python图形用户接口实例的具体代码,供大家参考,具体内容如下 运用tkinter图形库,模拟聊天应用界面,实现信息发送. from tkinter import * impor ...

  9. 用python画apc图_Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ! 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己继 ...

最新文章

  1. 【camera-radar】自动驾驶相机-毫米波雷达融合方案综述
  2. 特征工程包含那些步骤?如何进行特征的迭代?
  3. 在Linux 6上使用UDEV解决RAC ASM存储设备名问题
  4. Java基础课程---权限修饰符
  5. 云计算十年 腾讯新一代企业安全助力云化之路
  6. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界:光照与材质专场...
  7. 《走遍中国》珍藏版(十)
  8. oracle中的sysdba角色,oracle 以sysdba角色 登陆用户
  9. mysql workbench安装出错_MYSQL及MySQL WORKBENCH安装过程遇到的问题及处理方法
  10. mysql 局部变量集合_mysql全局变量和局部变量
  11. AR Camera开发记录(三) -- 替换人脸贴图
  12. 周莫凡python_机器学习 | 莫烦Python
  13. 怎样用计算机做ppt,电脑怎么做ppt(教你几个小技巧做出高大上的ppt)
  14. 7-6 红包 (20 分)
  15. Docker创始人兼CTO宣布离职;特斯拉被爆处于破产边缘;iOS更新,支持京沪地铁卡;谷歌安卓侵权案面临88亿美元赔款丨Q新闻...
  16. pc版qq登录及移动版qq登录的申请过程
  17. 【技术推荐】WebLogic 反序列化漏洞深入分析
  18. python做测试小工具_自制快速冒烟测试小工具--基于python多线程(2)
  19. vue内容横向循环滚动_在Vue中使用better-scroll实现横向滚动和竖向滚动
  20. STM32F429 笔记(一)- Keil 创建HAL工程

热门文章

  1. 开源的分布式数据库中间件系统Mycat和阿里巴巴Cobar的对比
  2. 《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0
  3. ALBRECHT密钻夹头SK30 2-14mm A92
  4. 人生如梦,一樽还酹江月!
  5. 控制台上画三角形圆和直线
  6. struts2总结(一)
  7. 人到中年,如何才能混的好?
  8. 基础知识 - 拉普拉斯机制
  9. 什么是黑帽SEO?20种黑帽手法详解。
  10. 通过图新地球将GPS信息写入照片