使用tkinter模块制作的一个简单的计算器
由于刚学这个模块,所以做的不是很好
截图:
点击计算后算式区的值会改成结果,可自行在数字触发的函数中添加数字输入就进行计算回显的功能

代码如下:

import tkinter as tk
import tkinter.messagebox as messagewindow = tk.Tk()
window.title('不成熟的计算器')
# 宽280,高350
# 不设置宽高,大小自动跟随内部控件
# window.geometry('250x280')
window['background'] = 'blue'
# 窗体禁止缩放
window.resizable(width=False, height=False)
# 计算公式
show_formula = tk.StringVar()
# 计算结果
show_result = tk.StringVar()# 创建显示算数栏
# 需要指定宽度  否者  会随着输入的字符增多被拉长
# 用来显示要计算的算式
formulaLabel = tk.Label(window, height=1, width=4, textvariable=show_formula,justify=tk.LEFT, anchor='se', font=('正楷', 12))
formulaLabel.grid(row=0, column=0, columnspan=4, sticky=tk.W + tk.E)
# 用来展示结果
calculationResultsLabel = tk.Label(window, height=2, width=4, textvariable=show_result,justify=tk.LEFT, anchor='se', font=('正楷', 19))
calculationResultsLabel.grid(row=1, column=0, columnspan=4, sticky=tk.W + tk.E)# 用来创建按钮
# row             行
# column          列
# operator        操作符(例如:+)
# text            控件名称
# columnspan      占几列
# width           宽度
def createButton(row, column, operator, text, columnspan=None, width=5):button = tk.Button(window, command=lambda: cal(operator),width=width, text=text, font=('正楷', 15))if columnspan is None:button.grid(row=row, column=column, padx=2, pady=4)else:button.grid(row=row, column=column, columnspan=columnspan, padx=2, pady=4)# 第一行按钮
createButton(2, 0, '1', '1')
createButton(2, 1, '2', '2')
createButton(2, 2, '3', '3')
createButton(2, 3, '+', '+')
# 第二行按钮
createButton(3, 0, '4', '4')
createButton(3, 1, '5', '5')
createButton(3, 2, '6', '6')
createButton(3, 3, '-', '-')
# 第三行按钮
createButton(4, 0, '7', '7')
createButton(4, 1, '8', '8')
createButton(4, 2, '9', '9')
createButton(4, 3, '*', '*')
# 第四行按钮
createButton(5, 0, '0', '0')
createButton(5, 1, '.', '.')
createButton(5, 2, 'back', 'back')
createButton(5, 3, '/', '/')
# 第五行按钮
createButton(6, 0, 'clear', '清 空', columnspan=2, width=12)
createButton(6, 2, '=', '计 算', columnspan=2, width=12)# 用来保存结果
formula = ''# 点击按钮调用的函数
def cal(key):global formula# 已经有的前一个key 例如1+2+ already_key为+already_key = ''# 截取算式最后一位,后面需要判断最后一位是否是运算符if len(formula) > 0:already_key = formula[-1]# 下面的* /处理代码是类似的  为了便于理解分开了# 加if key == '+':if formula != '':# 如果前面是*或者/就将其改成+if already_key == '*' or already_key == '/' or already_key == '.':formula = formula[0:-1] + keyelif already_key != '+' and already_key != '-' and already_key != '':formula += keyelif key == '-':if already_key == '-':formula = formula[0:-1] + '+'elif already_key == '+' or already_key == '.':formula = formula[0:-1] + '-'else:formula += key# 除法和乘法还要判断倒数第二个是不是* /号elif key == '*':if formula != '':# 如果最后一个为+ - / .的话if already_key == '+' or already_key == '-' or already_key == '/' or already_key == '.':# 如果算式长于大于等于2位if len(formula) >= 2:# 如果倒数第二个字符不是*或者/   防止出现* /之后再输入*的事件  跟后面减法(-)处理有关联if formula[-2] != '*' and formula[-2] != '/':formula = formula[0:-1] + keyelse:formula = formula[0:-1] + key# 如果前面是数字就可以直接添加到最后elif already_key != key:formula += keyelif key == '/':if formula != '':if already_key == '+' or already_key == '-' or already_key == '*' or already_key == '.':if len(formula) >= 2:if formula[-2] != '*' and formula[-2] != '/':formula = formula[0:-1] + keyelse:formula = formula[0:-1] + keyelif already_key != key:formula += key# 输入点的时候elif key == '.':# 如果最后一个不是运算符和.则添加到最后一个if formula != '' and already_key != '+' and already_key != '-' \and already_key != '*' and already_key != '/' and already_key != '.':formula += keyelif key == '=':# 进行计算  计算要做出错处理 要判断最后一个是不是运算符号if len(formula) < 1:passelif already_key != '*' and already_key != '/' and already_key != '+' \and already_key != '-':try:# 通过eval函数计算v = eval(formula)show_result.set(v)# 如果计算之后,讲算式改成结果  eval返回值是int类型  所以要转为字符型复制给暂存formula = str(v)show_formula.set(v)except ZeroDivisionError:message.showerror(title='警告', message='除数不能为0')else:message.showinfo(title='温馨提示', message='请检查您的公式,最后一个不能为运算符!')elif key == 'clear':# 清空显示区show_formula.set('')show_result.set('')# 清空暂存区formula = ''elif key == 'back':# 删除if len(formula) >= 1:formula = formula[0:-1]else:# 这里输入的全是数字formula += keyshow_formula.set(formula)window.mainloop()

使用python的tkinter模块制作一个计算器相关推荐

  1. 使用python中的tkinter模块制作一个学习打卡小软件

    学习任务打卡小软件---戈多Sensei 1.制定任务 2.完成任务 3.学习评估 最近为了给我的星星⭐写一个学习记录软件,学习了一下python中的tkinter模块,做了一个可视化打卡界面,此处为 ...

  2. 基于 Python 的 tkinter 模块制作的名人名言查询工具

    简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  3. 用 Python 的 tkinter 模块编写一个好看又强大的中国象棋

    继上次我的第一版的<中国象棋>程序之后,我又编写了第二版的<中国象棋>程序,关注我的粉丝知道,我在第一篇<中国象棋>的文章末尾说了,我会出第二版的,对第一版感兴趣的 ...

  4. 一个基于Python的tkinter模块实现的游戏活动日历模拟器

    一个基于Python的tkinter模块实现的游戏活动日历模拟器 1.Python环境准备 2.简单介绍 3.源代码 4.源代码及活动配置表下载 1.Python环境准备 运行该项目需要Python3 ...

  5. 生长算法实现点集的三角剖分(Python(Tkinter模块))

    生长算法实现点集的三角剖分( Python(Tkinter模块)) 关于三角剖分 假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合.那么该点集V的一个三角剖分T ...

  6. linux下载tkinter模块,Linux升级Python提示Tkinter模块找不到解决

    一.安装tkinter 在Linux中python默认是不安装Tkinter模块, [root@li250- ~]# python Python 2.6. (r266:, Feb , ::) [GCC ...

  7. Python——利用pygame模块制作RPG游戏(一)

    利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...

  8. python中label有什么用_对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...

  9. Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域

      准备在Python的Tkinter模块中用Canvas绘制如下形式的工艺卡片(图片来自参考文献5,原图来自参考文献4),但是在绘制图形时遇到两个问题,特此记录如下: jpg图片无法读取   Can ...

最新文章

  1. view5.3登录桌面提示当前可用桌面资源不足
  2. Android 面试精华题目总结
  3. 看事实风向的网站,做风向建模和出去放风筝,飞无人机的时候可以看一看~
  4. GridSearchCV和RandomizedSearchCV调参
  5. 同实例下复制表的2种方法
  6. 实验7-3-2 查找指定字符 (15分)
  7. git学习(四):理解git暂存区(stage)
  8. 如何在SQL Server中索引外键列
  9. python面向对象使用方法_python面向对象之方法
  10. power iso linux启动盘,怎么用poweriso制作u盘启动盘win10_poweriso制作u盘启动盘win10详细步骤...
  11. ubuntu 截图工具的使用
  12. {工作记录}遇到过的网络攻击合集爬虫User-Agent记录..{持续更新}
  13. 散列表(线性探测法二次探测法)
  14. 2012年8月27日|第二章:编程语言概述|总结
  15. linux堆栈有什么作用,嵌入式世界里,堆栈的作用和意义
  16. [Solved] Pycharm 提示Unresolved reference
  17. 提升网站关键词的排名
  18. 千万不要嫁给程序猿,我是认真的
  19. 网页制作:一个简易美观的登录界面
  20. “生态环境—空气质量”业务理解

热门文章

  1. Wireshark与Nginx
  2. 安装proxmox pve
  3. 论文阅读《Defining Pseudorange Integrity – Overbounding》
  4. js文字无限循环向上滚动
  5. 计算机基本知识3分钟演讲稿,3分钟演讲稿范文(精选3篇)
  6. lightroom磨皮滤镜中文插件Portraiture4最新版本
  7. Netscape 发明了 JavaScript
  8. php京东秒杀,js实现京东秒杀倒计时功能
  9. 【爬虫实战】手把手教你使用python爬取网络小说
  10. 硅谷之所以骨子里与众不同,是因为有这七件事