Python实现带图形界面的计算器
Python实现带图形界面的计算器
在本文中,我们将使用Python编写一个带有图形用户界面的计算器程序。这个程序将允许用户通过点击按钮或键盘输入数字和操作符,并在显示屏上显示计算结果。
开发环境准备
要运行这个计算器程序,您需要安装Python 3和tkinter库。首先,您可以从Python官方网站https://www.python.org/downloads/下载并安装最新版本的Python。安装完成后,打开命令提示符并输入以下命令来安装tkinter库:
pip install tk
创建计算器窗口
我们将使用tkinter库创建图形用户界面。首先,让我们导入必要的库并编写创建计算器窗口的函数:
import tkinter as tk
from functools import partialdef create_calculator_window():window = tk.Tk()window.geometry("300x400")window.title("计算器")# 在窗口中创建一个标签作为计算器的显示屏display = tk.Label(window, text="", font=("Helvetica", 16), height=2, width=18)display.grid(row=0, column=0, columnspan=4, pady=10)# ...window.mainloop()if __name__ == "__main__":create_calculator_window()
在上面的代码中,我们使用Tk()函数创建了一个名为window的窗口。然后,我们使用geometry()方法设置窗口的大小为300x400像素,并使用title()方法设置窗口的标题为"计算器"。
接下来,我们使用Label()函数创建了一个名为display的标签,作为计算器的显示屏。我们设置了标签的文本为空字符串,字体为Helvetica,字号为16,高度为2,宽度为18,并使用grid()方法将标签放置在窗口的第0行、第0列,横跨4列,上下间距为10像素。
处理用户的输入
计算器的操作都是通过用户的输入来完成的。我们需要定义一个函数来处理每个按钮的点击事件,并更新显示屏上的文本。让我们来编写这个函数:
def on_keypress(key):if key == "AC":display["text"] = ""elif key == "←":display["text"] = display["text"][:-1]elif key == "%":try:expression = eval(display["text"])display["text"] = str(expression / 100)except:display["text"] = "Error"elif key == "=":try:expression = display["text"]expression = expression.replace("÷", "/")expression = expression.replace("x", "*")result = eval(expression)if isinstance(result, float) and result.is_integer():result = int(result)display["text"] = str(result)except:display["text"] = "Error"else:if "=" in display["text"]:display["text"] = ""display["text"] += key
在上面的代码中,我们定义了一个名为on_keypress()的函数,接受一个名为key的参数,表示用户按下的按钮。
首先,我们检查key的值是否为"AC",如果是,我们将显示屏的文本设置为空字符串,即清零。
然后,我们检查key的值是否为"←",如果是,我们将显示屏的文本设置为当前文本的前一个字符。
接下来,我们检查key的值是否为"%“,如果是,我们尝试将显示屏上的表达式转换为一个浮点数,并将结果除以100。如果转换和计算过程中没有出现错误,我们将结果转换为字符串并更新显示屏的文本。否则,我们将显示屏的文本设置为"Error”。
然后,我们检查key的值是否为"=“,如果是,我们尝试解析并计算显示屏上的表达式。在计算之前,我们使用replace()方法将所有的"÷"替换为”/“,将所有的"x"替换为”*“,以便让Python的eval()函数理解这些操作符。然后,我们使用eval()函数计算表达式的结果,并将结果转换为字符串更新显示屏的文本。如果计算过程中出现任何错误,我们将显示屏的文本设置为"Error”。
最后,如果用户按下的是其他按钮(即数字和操作符),我们检查显示屏的文本是否包含"="。如果包含,说明用户正在输入新的表达式,我们将显示屏的文本设置为空字符串。然后,我们将用户的输入字符添加到显示屏的文本末尾。
创建按钮并绑定事件
接下来,我们需要创建所有的按钮,并将它们与对应的事件绑定在一起。让我们编写创建按钮的代码:
keys = [("AC", on_keypress),("←", on_keypress),("%", on_keypress),("÷", on_keypress),("7", on_keypress),("8", on_keypress),("9", on_keypress),("x", on_keypress),("4", on_keypress),("5", on_keypress),("6", on_keypress),("-", on_keypress),("1", on_keypress),("2", on_keypress),("3", on_keypress),("+", on_keypress),("0", on_keypress),(".", on_keypress),("(", on_keypress),(")", on_keypress),("=", on_keypress)
]row = 1
col = 0
for key, command in keys:button = tk.Button(window, text=key, font=("Helvetica", 12), height=2, width=5)button.grid(row=row, column=col, padx=5, pady=5)button.configure(command=partial(command, key))col += 1if col > 3:col = 0row += 1
在上面的代码中,我们创建了一个名为keys的列表,包含了所有按钮的标签和事件处理函数。
然后,我们使用for循环遍历keys列表中的每个元素。对于每个元素,我们使用Button()函数创建一个按钮,并设置按钮的文本、字体、高度和宽度。然后,我们使用grid()方法将按钮放置在窗口中的指定位置,并设置上下和左右的间距。
接下来,我们使用configure()方法将按钮的command属性设置为要执行的事件处理函数,并使用partial()函数传递按钮的标签作为事件处理函数的参数。
最后,我们更新col和row的值,确保按钮的位置正确。
处理键盘输入
除了通过点击按钮来输入内容之外,我们还希望用户能够使用键盘输入。为了实现这一点,我们需要使用bind()方法将键盘事件与相应的处理函数关联起来。让我们完成这一部分的代码:
window.bind("<Key>", lambda event: on_keypress(event.char))
在上面的代码中,我们使用bind()方法将"<Key>"事件与一个lambda函数关联起来。这个lambda函数将用户按下的字符作为参数,然后调用on_keypress()函数来处理这个字符。
运行计算器程序
最后,我们需要在if __name__ == "__main__":代码块中调用create_calculator_window()函数来运行计算器程序。
if __name__ == "__main__":create_calculator_window()
完整代码
下面是完整的带有图形界面的计算器程序的代码:
import tkinter as tk
from functools import partialdef create_calculator_window():window = tk.Tk()window.geometry("300x400")window.title("计算器")display = tk.Label(window, text="", font=("Helvetica", 16), height=2, width=18)display.grid(row=0, column=0, columnspan=4, pady=10)def on_keypress(key):if key == "AC":display["text"] = ""elif key == "←":display["text"] = display["text"][:-1]elif key == "%":try:expression = eval(display["text"])display["text"] = str(expression / 100)except:display["text"] = "Error"elif key == "=":try:expression = display["text"]expression = expression.replace("÷", "/")expression = expression.replace("x", "*")result = eval(expression)if isinstance(result, float) and result.is_integer():result = int(result)display["text"] = str(result)except:display["text"] = "Error"else:if "=" in display["text"]:display["text"] = ""display["text"] += keykeys = [("AC", on_keypress),("←", on_keypress),("%", on_keypress),("÷", on_keypress),("7", on_keypress),("8", on_keypress),("9", on_keypress),("x", on_keypress),("4", on_keypress),("5", on_keypress),("6", on_keypress),("-", on_keypress),("1", on_keypress),("2", on_keypress),("3", on_keypress),("+", on_keypress),("0", on_keypress),(".", on_keypress),("(", on_keypress),(")", on_keypress),("=", on_keypress)]row = 1col = 0for key, command in keys:button = tk.Button(window, text=key, font=("Helvetica", 12), height=2, width=5)button.grid(row=row, column=col, padx=5, pady=5)button.configure(command=partial(command, key))col += 1if col > 3:col = 0row += 1window.bind("<Key>", lambda event: on_keypress(event.char))window.mainloop()if __name__ == "__main__":create_calculator_window()
总结


在本文中,我们使用Python的tkinter库编写了一个带有图形用户界面的计算器程序。我们学习了如何创建计算器窗口、处理用户输入、创建按钮并绑定事件、处理键盘输入以及运行程序的整个流程。
希望本文能够帮助你理解如何使用Python编写带有图形界面的计算器程序。如果您有任何问题,请随时提问!
相关文章:
Python实现带图形界面的计算器
Python实现带图形界面的计算器 在本文中,我们将使用Python编写一个带有图形用户界面的计算器程序。这个程序将允许用户通过点击按钮或键盘输入数字和操作符,并在显示屏上显示计算结果。 开发环境准备 要运行这个计算器程序,您需要安装Pyth…...
$ vue -Vbash: vue: command not found
$ vue -V bash: vue: command not found报这个错,我们需要找到vue安装路径,添加在环境变量的用户变量中: 1、vue安装路径 2、编辑环境变量 然后重新打开命令框,就可以了...
专业音视频领域中,Pro AV的崛起之路
编者按:在技术进步的加持下,AV行业发展得如何了?本文采访了两位深耕于广播电视行业的技术人,为我们介绍了专业音视频的进展:一位冉冉升起的新星:Pro AV以及FPGA在其中发挥的作用。 美国,拉斯维加…...
vscode 右侧滚动条标记不提示,问题解决纪录
问题描述 用vscode看代码时,我希望在右侧提示一个变量在文件下都在那里使用,在那里赋值,之前该功能是存在的,当我打开一个新的文件夹时这个功能消失了。 解决办法 在setting.json文件下输入 "C_Cpp.intelliSenseEngine&…...
【Java 进阶篇】JavaScript特殊语法详解
JavaScript是一门非常灵活的编程语言,允许开发人员使用多种不同的语法和技巧来解决各种问题。本篇博客将深入探讨JavaScript中的一些特殊语法,这些语法可能不是常规的JavaScript编程知识,但它们对于理解语言的强大之处以及在某些情况下解决问…...
PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九)
PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九) 一、算法介绍二、算法实现1.可视化代码2.完整代码(特征匹配+可视化)最终效果一、算法介绍 关于点云配准中的匹配对,如果能够可视化将极大提高实验的准确性,还好PCL提供了这样的可视化工具,做法…...
Vue el-table全表搜索,模糊匹配-前端静态查询
后端返回的数据是全部的数据,没有分页,前端需要做的是分页全表模糊查询 代码: //根据关键字对表全局搜索 globalSearch() {//为了拿到对象的列名let filterList Object.keys(this.tableData[0]);if (this.searchWord) {this.tableFilterDat…...
基于html5开发的Win12网页版,抢先体验
据 MSPoweruser 报道,Windows 11虽然刚刚开始步入正轨,但最新爆料称微软已经在开启下一个计划,Windows 12 的开发将在 去年3 月份开始。德国科技网站 Deskmodder.de 称,根据内部消息,微软将在 2022年3 月开始开发 Wind…...
Studio One6.5中文版本下载安装步骤
在唱歌效果调试当中,我们经常给客户安装的几款音频工作站。第一,Studio One 6是PreSonus公司开发的一款功能强大的音频工作平台,具有丰富的音频处理功能和灵活的工作流程。以下是Studio One6的一些主要特点: 1.多轨录音和编辑&…...
Java架构师缓存架构设计解决方案
目录 1 缓存常见的三大问题1.1 缓存雪崩1.2 缓存穿透1.3 缓存击穿2 缓存key的生成策略3 热点数据集中失效的问题4 如何提高缓存的命中率5 缓存和数据库双写不一致的问题6 如何对缓存数据进行分片想学习架构师构建流程请跳转:Java架构师系统架构设计 1 缓存常见的三大问题 缓…...
【玩转Redhat Linux 8.0系列 | 实验—使用Bash shell执行命令】
今天继续分享一些Redhat Linux 8.0的知识,记得关注,会一直更新~ 访问命令行 任务执行清单 在本实验中,您将使用Bash shell来执行命令。 成果 使用Bash shell命令行成功运行简单的程序。 执行用于识别文件类型并显示文本文件部分内容的命…...
Linux系统编程详解
Linux 多线程编程 什么是线程? 与线程类似,线程是允许应用程序并发执行多个任务的一种机制 线程是轻量级的进程(LWP:Light Weight Process),在 Linux 环境下线程的本 质仍是进程。 一个进程可以包含多个线…...
ios设备管理软件iMazing 2.17.11官方中文版新增功能介绍
iMazing 2.17.11官方中文版(ios设备管理软件)是一款管理苹果设备的软件, Windows 平台上的一款帮助用户管理 IOS 手机的应用程序,软件功能非常强大,界面简洁明晰、操作方便快捷,设计得非常人性化。iMazing官方版与苹果设备连接后&…...
算法通关村第18关【青铜】| 回溯
回溯算法是一种解决组合优化问题和搜索问题的算法。它通过尝试各种可能的选择来找到问题的解决方案。回溯算法通常用于问题的解空间非常大,而传统的穷举法会导致计算时间爆炸的情况。回溯算法可以帮助限制搜索空间,以提高效率。 回溯算法的核心思想是在…...
【环境搭建】linux docker-compose安装seata1.6.1,使用nacos注册、db模式
新建目录,挂载用 mkdir -p /data/docker/seata/resources mkdir -p /data/docker/seata/logs 给权限 chmod -R 777 /data/docker/seata 先在/data/docker/seata目录编写一个使用file启动的docker-compose.yml文件(seata包目录的script文件夹有&#…...
20231008-20231013 读书笔记
计算机硬件 基本硬件系统:运算器、控制器、存储器、输入设备和输出设备中央处理单元(CPU):运算器、控制器、寄存器组和内部总线等部件组成 功能:程序控制、操作控制、时间控制、数据处理运算器:ALU、AC、DR、PSW控制器…...
YOLOv8 windows下的离线安装 offline install 指南 -- 以 带有CUDA版本的pytorch 为例
文章大纲 简介基础环境与安装包的准备windows 下 lap 包的离线安装conda 打包基础环境使用 pip 下载 whl 包特别的注意:pytorch cuda 版本的下载迁移与部署流程基础python 的conda 环境迁移与准备必备包: 安装cuda 版本 的torch,torchvision,ultralytics参考文献与学习路径…...
百度车牌识别AI Linux使用方法-armV7交叉编译
1、获取百度ai的sdk 百度智能云-登录 (baidu.com) 里面有两个版本的armV7和armV8架构。v7架构的性能比较低往往需要交叉编译,v8的板子性能往往比较好,可以直接在板子上编译。 解压到ubuntu里面。这里介绍v7架构的。 2、ubuntu环境配置 ubuntu下安装软件…...
数学建模——确定性时间序列分析方法
目录 介绍 确定性时间序列分析方法 1、时间序列的常见趋势 (1)长期趋势 (2)季节变动 (3)循环变动 (4)不规则变动 常见的时间序列模型有以下几类 2、时间序列预测的具体方法 …...
Opencv——颜色模型+通道分离与合并
视频加载/摄像头调用 VideoCapture允许一开始定义一个空的对象 VideoCapture video VideoCapture(const String &filename,int apiPreferenceCAP_ANY) filename:读取的视频文件或者图像序列名称 apiPreference:读取数据时设置的属性,例如编码格式、是否调用Op…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
MyBatis-Plus 常用条件构造方法
1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...
MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool
在当今数据驱动的时代,数据库作为数据存储与管理的核心,其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库,在众多应用场景中发挥着关键作用。在这篇博客中,我将围绕 MySQL 数据库的核心知识展开,涵盖事务及…...
基于Java的离散数学题库系统设计与实现:附完整源码与论文
JAVASQL离散数学题库管理系统 一、系统概述 本系统采用Java Swing开发桌面应用,结合SQL Server数据库实现离散数学题库的高效管理。系统支持题型分类(选择题、填空题、判断题等)、难度分级、知识点关联,并提供智能组卷、在线测试…...
LeetCode 2894.分类求和并作差
目录 题目: 题目描述: 题目链接: 思路: 思路一详解(遍历 判断): 思路二详解(数学规律/公式): 代码: Java思路一(遍历 判断&a…...
我认为STM32输入只分为模拟输入 与 数字输入
核心概念解析 模拟输入 (Analog Input) 设计目的:直接连接模拟信号(如ADC采集电压、温度传感器输出) 硬件行为: ✅ 断开内部数字电路(施密特触发器禁用) ✅ 信号直通模拟外设(如ADC、运放&…...
