Python综合案例—利用tkinter实现计算器的程序
目录
一、导入 tkinter 库
定义全局变量
二、定义回调函数
三、创建窗口对象
四、创建标签控件
五、创建数字按钮
六、创建加、减、乘、除和等于按钮
七、创建清空按钮
八、总结
用Python实现计算器可以让我们更好地理解面向对象编程、GUI 编程和事件驱动编程等概念,并掌握 Python 语言的基本语法和常用库。同时,计算器是一种常见的应用程序,实现它不仅可以提高我们的编程技能,还可以方便我们平时进行简单的计算。
在编写计算器程序的过程中,我们需要考虑很多问题,如如何设计 GUI 界面、如何处理用户输入、如何进行数值计算等等。这些问题都是实际编写应用程序时必须面对的,因此通过实现计算器程序,我们可以更好地了解实际软件开发中的问题和解决方法。
用Python实现计算器的过程包括以下步骤:
导入所需库:我们需要使用 tkinter 库来创建 GUI 界面,并使用 eval 函数来进行数值计算。
创建 GUI 界面:使用 tkinter 库来创建一个窗口,并在窗口中添加数字按钮、运算符按钮和其他功能按钮,如清除按钮、等于按钮等。同时,也需要在界面上创建一个文本框来显示用户输入和计算结果。
处理用户输入:通过绑定按钮事件和键盘事件来处理用户对按钮的单击和键盘的输入。当用户单击数字按钮时,将数字添加到文本框中;当用户单击运算符按钮时,将操作符添加到文本框中。同时也需要处理删除字符和清空文本框等操作。
进行数值计算:当用户单击等于按钮时,使用 eval 函数来计算文本框中的表达式,并将结果显示在文本框中。
完善程序功能:根据需求可以增加其他功能,如添加小数点、处理错误输入、防止除零等。
一、导入 tkinter 库
在 Python 中,使用 import
语句可以导入其他模块或库。在这个程序中,我们首先需要导入 tkinter 库,以便创建 GUI 界面。具体的语句如下:
import tkinter as tk
这里我们将 tkinter 库重命名为 tk
,以便在后面的代码中更方便地使用。
定义全局变量
在计算器程序中,我们需要保存当前输入的数字和运算符,以便进行计算。因此,我们在程序一开始就要定义一些变量来保存这些值。具体的变量有 num1
、num2
和 operator
,它们分别表示当前输入的第一个数字、第二个数字和运算符,初始值均为空字符串。此外,由于这些变量需要在多个函数中使用,因此我们将它们定义为全局变量。具体的语句如下:
# 定义全局变量,用于保存当前输入的数字和运算符
num1 = ''
num2 = ''
operator = ''
二、定义回调函数
在 GUI 界面中,按钮、菜单等控件被点击时会触发相应的事件,我们需要编写回调函数来处理这些事件。在这个程序中,我们需要编写三个回调函数,分别用于将数字、运算符和等于号添加到显示屏上,具体的函数如下:
add_digit(digit)
:该函数用于将数字添加到显示屏上。它的参数digit
表示当前点击的数字,函数会将该数字添加到num1
或num2
变量中,并更新显示屏的内容。如果当前没有输入运算符,则数字会被添加到num1
中;否则,数字会被添加到num2
中。具体的代码如下:
def add_digit(digit):global num1, num2, operatorif operator == '':num1 += str(digit)label.config(text=num1)else:num2 += str(digit)label.config(text=num2)
add_operator(op)
:该函数用于将运算符添加到显示屏上。它的参数op
表示当前点击的运算符。函数会将该运算符添加到operator
变量中,并更新显示屏的内容。如果num1
不为空,则运算符会被添加到num1
后面;否则,运算符不会被添加到显示屏上。具体的代码如下:def add_operator(op):global num1, num2, operatorif num1 != '' and num2 == '':operator = oplabel.config(text=num1 + operator)
calculate()
:该函数用于计算结果。它会根据当前缓存的数字和运算符计算结果,并更新显示屏的内容。具体的代码如下:
def calculate():global num1, num2, operatorif num1 != '' and num2 != '' and operator != '':num1 = str(eval(num1 + operator + num2))num2 = ''operator = ''label.config(text=num1)
在计算过程中,我们使用了 Python 内置的
eval()
函数,该函数可以将字符串作为代码执行,并返回结果。这里我们将缓存的数字和运算符拼接成一个字符串,并将其传递给eval()
函数进行计算。
三、创建窗口对象
在 tkinter 中,创建一个窗口对象需要使用 Tk()
构造函数。在这个程序中,我们使用该函数创建了一个名为 window
的窗口对象,并设置了窗口标题为 Calculator
。具体的代码如下:
# 创建一个名为 window 的窗口对象
window = tk.Tk()# 设置窗口标题
window.title('Calculator')
四、创建标签控件
在 tkinter 中,创建一个标签控件需要使用 Label()
构造函数。在这个程序中,我们使用该函数创建了一个名为 label
的标签控件,并设置了其字体、宽度、高度、背景色和文本对齐方式等属性。同时,我们将该标签控件放置在窗口中央,使用 grid()
方法指定其行列号和边距等参数。具体的代码如下:
# 创建一个标签对象,用于显示计算结果
label = tk.Label(window, text='0', font=('Arial', 20), width=15, height=2, bg='white', anchor='e')# 将标签对象放置在窗口中央
label.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
在这里,row=0
和 column=0
表示该控件位于第 1 行、第 1 列,columnspan=4
表示该控件跨越了 4 列(即占据整个顶部),padx=10
和 pady=10
表示控件边缘和窗口边框之间的水平和垂直间距均为 10。
五、创建数字按钮
在 tkinter 中,创建一个按钮控件需要使用 Button()
构造函数。在这个程序中,我们使用循环语句创建了数字按钮,并设置了其文本、字体、宽度、高度和回调函数等属性。同时,我们使用 grid()
方法指定了按钮的行列号和边距等参数,将其放置在窗口中间。具体的代码如下:
# 创建数字按钮并绑定回调函数
for i in range(1, 10):btn = tk.Button(window, text=str(i), font=('Arial', 20), width=3, height=2, command=lambda digit=i:add_digit(digit))btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)
在这里,range(1, 10)
表示数字按钮的取值范围,循环变量 i
依次取值 1 到 9。text=str(i)
表示按钮的文本为当前的数字;font=('Arial', 20)
表示按钮的字体为 Arial,大小为 20;width=3
和 height=2
表示按钮的宽度和高度;command=lambda digit=i:add_digit(digit)
表示按钮被点击后会调用 add_digit()
函数,并将当前的数字作为参数传递给该函数。在 grid()
方法中,row=(i-1)//3+1
和 column=(i-1)%3
表示按钮的行列号,padx=5
和 pady=5
表示控件边缘和窗口边框之间的水平和垂直间距均为 5。
六、创建加、减、乘、除和等于按钮
在 tkinter 中,创建一个按钮控件需要使用 Button()
构造函数。在这个程序中,我们使用该函数创建了加、减、乘、除和等于按钮,并设置了其文本、字体、宽度、高度和回调函数等属性。同时,我们使用 grid()
方法指定了按钮的行列号和边距等参数,将其放置在窗口中间。具体的代码如下:
# 创建加、减、乘、除、等于按钮并绑定回调函数
btn_add = tk.Button(window, text='+', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('+'))
btn_sub = tk.Button(window, text='-', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('-'))
btn_mul = tk.Button(window, text='*', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('*'))
btn_div = tk.Button(window, text='/', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('/'))
btn_eq = tk.Button(window, text='=', font=('Arial', 20), width=3, height=2, command=calculate)# 将按钮对象放置在窗口中间
btn_add.grid(row=1, column=3, padx=5, pady=5)
btn_sub.grid(row=2, column=3, padx=5, pady=5)
btn_mul.grid(row=3, column=3, padx=5, pady=5)
btn_div.grid(row=4, column=3, padx=5, pady=5)
btn_eq.grid(row=4, column=2, padx=5, pady=5)
在这里,text='+'
、text='-'
、text='*'
和 text='/'
表示加、减、乘、除按钮的文本,text='='
表示等于按钮的文本;font=('Arial', 20)
表示按钮的字体为 Arial,大小为 20;width=3
和 height=2
表示按钮的宽度和高度;command=lambda:add_operator('+')
、command=lambda:add_operator('-')
、command=lambda:add_operator('*')
和 command=lambda:add_operator('/')
表示分别将加、减、乘、除按钮的回调函数设置为 add_operator()
函数,并将相应的运算符作为参数传递给该函数;command=calculate
表示将等于按钮的回调函数设置为 calculate()
函数。在 grid()
方法中,row
和 column
表示按钮的行列号,padx
和 pady
表示控件边缘和窗口边框之间的水平和垂直间距。
七、创建清空按钮
在 tkinter 中,创建一个按钮控件需要使用 Button()
构造函数。在这个程序中,我们使用该函数创建了一个名为 btn_clear
的清空按钮,并设置了其文本、字体、宽度、高度和回调函数等属性。同时,我们使用 grid()
方法指定了按钮的行列号和边距等参数,将其放置在窗口底部。具体的代码如下:
# 创建清空按钮并绑定回调函数
btn_clear = tk.Button(window, text='C', font=('Arial', 20), width=3, height=2, command=lambda:clear())
btn_clear.grid(row=4, column=0, padx=
八、总结
这个程序使用了 tkinter 库来创建 GUI 界面。它创建一个名为 window
的窗口,并在窗口中央创建了一个标签,用于显示计算结果。然后,它使用循环语句创建了数字按钮,并绑定了回调函数add_digit()
,用于将数字添加到显示屏上;使用按钮对象创建了加、减、乘、除、等于按钮,并绑定了回调函数 add_operator()
和 calculate()
,分别用于将运算符添加到显示屏上和计算结果;最后,在底部创建了一个清空按钮,并绑定了回调函数 clear()
,用于清空显示屏和缓存的数字和运算符。
当用户点击数字按钮时,会调用 add_digit()
函数,该函数会将数字添加到 num1
或 num2
变量中,并更新显示屏的内容。当用户点击加、减、乘、除按钮时,会调用 add_operator()
函数,该函数会将运算符添加到 operator
变量中,并更新显示屏的内容。当用户点击等于按钮时,会调用 calculate()
函数,该函数会根据当前缓存的数字和运算符计算结果,并更新显示屏的内容。最后,当用户点击清空按钮时,会调用 clear()
函数,该函数会清空显示屏和缓存的数字和运算符。
完整代码:
import tkinter as tk# 定义全局变量,用于保存当前输入的数字和运算符
num1 = ''
num2 = ''
operator = ''# 定义一个函数,用于将数字添加到显示屏上
def add_digit(digit):global num1, num2, operatorif operator == '':num1 += str(digit)label.config(text=num1)else:num2 += str(digit)label.config(text=num2)# 定义一个函数,用于将运算符添加到显示屏上
def add_operator(op):global num1, num2, operatorif num1 != '' and num2 == '':operator = oplabel.config(text=num1 + operator)# 定义一个函数,用于计算结果
def calculate():global num1, num2, operatorif num1 != '' and num2 != '' and operator != '':num1 = str(eval(num1 + operator + num2))num2 = ''operator = ''label.config(text=num1)# 创建一个名为 window 的窗口对象
window = tk.Tk()# 设置窗口标题
window.title('Calculator')# 创建一个标签对象,用于显示计算结果
label = tk.Label(window, text='0', font=('Arial', 20), width=15, height=2, bg='white', anchor='e')# 将标签对象放置在窗口中央
label.grid(row=0, column=0, columnspan=4, padx=10, pady=10)# 创建数字按钮并绑定回调函数
for i in range(1, 10):btn = tk.Button(window, text=str(i), font=('Arial', 20), width=3, height=2, command=lambda digit=i:add_digit(digit))btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)# 创建加、减、乘、除、等于按钮并绑定回调函数
btn_add = tk.Button(window, text='+', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('+'))
btn_sub = tk.Button(window, text='-', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('-'))
btn_mul = tk.Button(window, text='*', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('*'))
btn_div = tk.Button(window, text='/', font=('Arial', 20), width=3, height=2, command=lambda:add_operator('/'))
btn_eq = tk.Button(window, text='=', font=('Arial', 20), width=3, height=2, command=calculate)# 将按钮对象放置在窗口中间
btn_add.grid(row=1, column=3, padx=5, pady=5)
btn_sub.grid(row=2, column=3, padx=5, pady=5)
btn_mul.grid(row=3, column=3, padx=5, pady=5)
btn_div.grid(row=4, column=3, padx=5, pady=5)
btn_eq.grid(row=4, column=2, padx=5, pady=5)# 创建清空按钮并绑定回调函数
btn_clear = tk.Button(window, text='C', font=('Arial', 20), width=3, height=2, command=lambda:clear())
btn_clear.grid(row=4, column=0, padx=5, pady=5)# 定义一个函数,用于清空显示屏和缓存的数字和运算符
def clear():global num1, num2, operatornum1 = ''num2 = ''operator = ''label.config(text='0')# 进入主消息循环
window.mainloop()
Python综合案例—利用tkinter实现计算器的程序相关推荐
- Python实战:利用Tkinter实现屏保程序
利用Tkinter实现彩球碰撞屏保 一.架构与思路 (1)主函数: main():通过类启动程序: (2)类: ScreenSaver():用于定义屏保和主画布,调用球创建.运动等函数: Random ...
- PDF下载!《Python十大基础专题》《247个Python综合案例》《Pandas 20页学习笔记》...
Python 技术栈 完整学习路线 如今书籍汗牛充栋,如何从零.循序渐进地掌握Python技术栈,成为很多读者朋友们关心的问题.最近,我特意按照Python技术栈的学习逻辑,把它划分为六个阶段,并且给 ...
- 回归综合案例——利用回归模型预测鲍鱼年龄
回归综合案例--利用回归模型预测鲍鱼年龄 1 数据集探索性分析 首先将鲍鱼数据集abalone_dataset.csv读取为pandas的DataFrame格式. import pandas as p ...
- python数据分析案例-利用生存分析Kaplan-Meier法与COX比例风险回归模型进行客户流失分析与剩余价值预测
目录 1. 概述 1.1 背景 1.2 目的 1.3 数据说明 2. 相关概念 2.1 事件 2.2 生存时间 2.3 删失 2.4 生存概率 2.5 中位生存时间 2.6 风险概率 3. 数据处理 ...
- python递归算法案例教案_Python电子教案2-1-Python程序实例解析.ppt
Python电子教案2-1-Python程序实例解析.ppt 简单说,eval()的作用是将输入的字符串内容变成Python语句,并执行这个语句.实例代码1.1使用eval()函数将用户的部分输入(T ...
- python与专业相结合应用案例_Office高级应用与Python综合案例教程(普通高等教育十三五规划教材)...
目录 第1章 Word 2016高级应用 1.1 文档排版 1.1.1 排版原则 1.1.2 图文混排 1.1.3 页面设置 1.2 样式设置 1.2.1 样式概述 1.2.2 样式编辑 1.2.3 ...
- 【每天学点Python】案例三:BMR计算器
BMR计算器 V1.0 案例描述: 基础代谢率(Basal Metabolic Rate,简称BMR)是指:我们在安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上 计算公式: ...
- Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名
前言 今天给大家介绍Python实现课堂随机抽选提问并语音播报学生姓名实战案例,废话不多说直接开整~ 开发工具 Python版本: 3.8 相关模块: tkinter模块 time模块 random模 ...
- office高级应用与python综合案例教程_Office高级应用与Python综合案例教程
第1章 Word 2016高级应用 1.1 文档排版 1.1.1 排版原则 1.1.2 图文混排 1.1.3 页面设置 1.2 样式设置 1.2.1 样式概述 1.2.2 样式编辑 1.2.3 主题 ...
最新文章
- 【Python】青少年蓝桥杯_每日一题_5.27_画菱形
- textarea 转换 html,textarea html标签转换为纯文本
- when will ifm open?
- JavaScript中函数的变量提升问题
- leetcode 147. 对链表进行插入排序
- java 在数组末尾添加元素_Java快问快答:用 ArrayList 还是 LinkedList?
- php变量教学,PHP变量详解
- 绿色日期控件皮肤 My97 DatePicker
- PyTorch官方教程大更新:增加标签索引,新手更加友好
- php调用外站数据,dedecms数据库外部调用,两dedecms站点数据远程调用
- 我们来研究一下Eureka的工作流程机制及相关原理
- 新一代华为折叠屏手机MateX2,你会考虑入手吗?
- Java-P: 1、程序设计语言的分类
- PowerPC家族谱系详解
- 计算机的神奇小游戏,电脑课我们常玩的13个小游戏
- php函数收集参数,now-go时间百宝箱
- html无法访问页面,为什么网页无法访问?
- w10用计算机卸载,win10系统内置应用卸载方法
- 虚拟机网络模式(NAT模式)
- linux 防火墙设置ftp端口,CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关...
热门文章
- java版我的世界地图大小_我的世界:6个值得一玩的地图种子,覆盖各个版本,赶紧开存档吧...
- 计算机财务函数pmt,5个财务函数FV、PV、PMT、NPER与RATE
- 【转】互联网金融产品的设计思考【腾讯实践干货】
- union 和 group by 怎么执行
- 前端测试开发工具--mock 的使用
- Kettle学习, 更新表数据。
- android 斗鱼礼物动画,GitHub - zy841336855/RewardLayout: 仿斗鱼直播送礼物和连击效果动画...
- 「管理数学基础」1.7 矩阵理论:方阵特征值估计、圆盘定理、谱与谱半径
- 钗头凤——为IT诗人代腾飞而作 (转)
- MATLAB中alignsignals函数使用