使用python的tkinter模块制作一个计算器
使用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模块制作一个计算器相关推荐
- 使用python中的tkinter模块制作一个学习打卡小软件
学习任务打卡小软件---戈多Sensei 1.制定任务 2.完成任务 3.学习评估 最近为了给我的星星⭐写一个学习记录软件,学习了一下python中的tkinter模块,做了一个可视化打卡界面,此处为 ...
- 基于 Python 的 tkinter 模块制作的名人名言查询工具
简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...
- 用 Python 的 tkinter 模块编写一个好看又强大的中国象棋
继上次我的第一版的<中国象棋>程序之后,我又编写了第二版的<中国象棋>程序,关注我的粉丝知道,我在第一篇<中国象棋>的文章末尾说了,我会出第二版的,对第一版感兴趣的 ...
- 一个基于Python的tkinter模块实现的游戏活动日历模拟器
一个基于Python的tkinter模块实现的游戏活动日历模拟器 1.Python环境准备 2.简单介绍 3.源代码 4.源代码及活动配置表下载 1.Python环境准备 运行该项目需要Python3 ...
- 生长算法实现点集的三角剖分(Python(Tkinter模块))
生长算法实现点集的三角剖分( Python(Tkinter模块)) 关于三角剖分 假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合.那么该点集V的一个三角剖分T ...
- linux下载tkinter模块,Linux升级Python提示Tkinter模块找不到解决
一.安装tkinter 在Linux中python默认是不安装Tkinter模块, [root@li250- ~]# python Python 2.6. (r266:, Feb , ::) [GCC ...
- Python——利用pygame模块制作RPG游戏(一)
利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...
- python中label有什么用_对Python中TKinter模块中的Label组件实例详解
Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...
- Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域
准备在Python的Tkinter模块中用Canvas绘制如下形式的工艺卡片(图片来自参考文献5,原图来自参考文献4),但是在绘制图形时遇到两个问题,特此记录如下: jpg图片无法读取 Can ...
最新文章
- view5.3登录桌面提示当前可用桌面资源不足
- Android 面试精华题目总结
- 看事实风向的网站,做风向建模和出去放风筝,飞无人机的时候可以看一看~
- GridSearchCV和RandomizedSearchCV调参
- 同实例下复制表的2种方法
- 实验7-3-2 查找指定字符 (15分)
- git学习(四):理解git暂存区(stage)
- 如何在SQL Server中索引外键列
- python面向对象使用方法_python面向对象之方法
- power iso linux启动盘,怎么用poweriso制作u盘启动盘win10_poweriso制作u盘启动盘win10详细步骤...
- ubuntu 截图工具的使用
- {工作记录}遇到过的网络攻击合集爬虫User-Agent记录..{持续更新}
- 散列表(线性探测法二次探测法)
- 2012年8月27日|第二章:编程语言概述|总结
- linux堆栈有什么作用,嵌入式世界里,堆栈的作用和意义
- [Solved] Pycharm 提示Unresolved reference
- 提升网站关键词的排名
- 千万不要嫁给程序猿,我是认真的
- 网页制作:一个简易美观的登录界面
- “生态环境—空气质量”业务理解