当前位置: 首页 > news >正文

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()函数传递按钮的标签作为事件处理函数的参数。

最后,我们更新colrow的值,确保按钮的位置正确。

处理键盘输入

除了通过点击按钮来输入内容之外,我们还希望用户能够使用键盘输入。为了实现这一点,我们需要使用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()

总结

效果1
效果2

在本文中,我们使用Python的tkinter库编写了一个带有图形用户界面的计算器程序。我们学习了如何创建计算器窗口、处理用户输入、创建按钮并绑定事件、处理键盘输入以及运行程序的整个流程。

希望本文能够帮助你理解如何使用Python编写带有图形界面的计算器程序。如果您有任何问题,请随时提问!

相关文章:

Python实现带图形界面的计算器

Python实现带图形界面的计算器 在本文中&#xff0c;我们将使用Python编写一个带有图形用户界面的计算器程序。这个程序将允许用户通过点击按钮或键盘输入数字和操作符&#xff0c;并在显示屏上显示计算结果。 开发环境准备 要运行这个计算器程序&#xff0c;您需要安装Pyth…...

$ vue -Vbash: vue: command not found

$ vue -V bash: vue: command not found报这个错&#xff0c;我们需要找到vue安装路径&#xff0c;添加在环境变量的用户变量中&#xff1a; 1、vue安装路径 2、编辑环境变量 然后重新打开命令框&#xff0c;就可以了...

专业音视频领域中,Pro AV的崛起之路

编者按&#xff1a;在技术进步的加持下&#xff0c;AV行业发展得如何了&#xff1f;本文采访了两位深耕于广播电视行业的技术人&#xff0c;为我们介绍了专业音视频的进展&#xff1a;一位冉冉升起的新星&#xff1a;Pro AV以及FPGA在其中发挥的作用。 美国&#xff0c;拉斯维加…...

vscode 右侧滚动条标记不提示,问题解决纪录

问题描述 用vscode看代码时&#xff0c;我希望在右侧提示一个变量在文件下都在那里使用&#xff0c;在那里赋值&#xff0c;之前该功能是存在的&#xff0c;当我打开一个新的文件夹时这个功能消失了。 解决办法 在setting.json文件下输入 "C_Cpp.intelliSenseEngine&…...

【Java 进阶篇】JavaScript特殊语法详解

JavaScript是一门非常灵活的编程语言&#xff0c;允许开发人员使用多种不同的语法和技巧来解决各种问题。本篇博客将深入探讨JavaScript中的一些特殊语法&#xff0c;这些语法可能不是常规的JavaScript编程知识&#xff0c;但它们对于理解语言的强大之处以及在某些情况下解决问…...

PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九)

PCL点云处理之配准中的匹配对连线可视化显示 Correspondences(二百一十九) 一、算法介绍二、算法实现1.可视化代码2.完整代码(特征匹配+可视化)最终效果一、算法介绍 关于点云配准中的匹配对,如果能够可视化将极大提高实验的准确性,还好PCL提供了这样的可视化工具,做法…...

Vue el-table全表搜索,模糊匹配-前端静态查询

后端返回的数据是全部的数据&#xff0c;没有分页&#xff0c;前端需要做的是分页全表模糊查询 代码&#xff1a; //根据关键字对表全局搜索 globalSearch() {//为了拿到对象的列名let filterList Object.keys(this.tableData[0]);if (this.searchWord) {this.tableFilterDat…...

基于html5开发的Win12网页版,抢先体验

据 MSPoweruser 报道&#xff0c;Windows 11虽然刚刚开始步入正轨&#xff0c;但最新爆料称微软已经在开启下一个计划&#xff0c;Windows 12 的开发将在 去年3 月份开始。德国科技网站 Deskmodder.de 称&#xff0c;根据内部消息&#xff0c;微软将在 2022年3 月开始开发 Wind…...

Studio One6.5中文版本下载安装步骤

在唱歌效果调试当中&#xff0c;我们经常给客户安装的几款音频工作站。第一&#xff0c;Studio One 6是PreSonus公司开发的一款功能强大的音频工作平台&#xff0c;具有丰富的音频处理功能和灵活的工作流程。以下是Studio One6的一些主要特点&#xff1a; 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的知识&#xff0c;记得关注&#xff0c;会一直更新~ 访问命令行 任务执行清单 在本实验中&#xff0c;您将使用Bash shell来执行命令。 成果 使用Bash shell命令行成功运行简单的程序。 执行用于识别文件类型并显示文本文件部分内容的命…...

Linux系统编程详解

Linux 多线程编程 什么是线程&#xff1f; 与线程类似&#xff0c;线程是允许应用程序并发执行多个任务的一种机制 线程是轻量级的进程&#xff08;LWP&#xff1a;Light Weight Process&#xff09;&#xff0c;在 Linux 环境下线程的本 质仍是进程。 一个进程可以包含多个线…...

ios设备管理软件iMazing 2.17.11官方中文版新增功能介绍

iMazing 2.17.11官方中文版(ios设备管理软件)是一款管理苹果设备的软件&#xff0c; Windows 平台上的一款帮助用户管理 IOS 手机的应用程序&#xff0c;软件功能非常强大&#xff0c;界面简洁明晰、操作方便快捷&#xff0c;设计得非常人性化。iMazing官方版与苹果设备连接后&…...

算法通关村第18关【青铜】| 回溯

回溯算法是一种解决组合优化问题和搜索问题的算法。它通过尝试各种可能的选择来找到问题的解决方案。回溯算法通常用于问题的解空间非常大&#xff0c;而传统的穷举法会导致计算时间爆炸的情况。回溯算法可以帮助限制搜索空间&#xff0c;以提高效率。 回溯算法的核心思想是在…...

【环境搭建】linux docker-compose安装seata1.6.1,使用nacos注册、db模式

新建目录&#xff0c;挂载用 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文件&#xff08;seata包目录的script文件夹有&#…...

20231008-20231013 读书笔记

计算机硬件 基本硬件系统&#xff1a;运算器、控制器、存储器、输入设备和输出设备中央处理单元&#xff08;CPU&#xff09;:运算器、控制器、寄存器组和内部总线等部件组成 功能&#xff1a;程序控制、操作控制、时间控制、数据处理运算器&#xff1a;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架构的性能比较低往往需要交叉编译&#xff0c;v8的板子性能往往比较好&#xff0c;可以直接在板子上编译。 解压到ubuntu里面。这里介绍v7架构的。 2、ubuntu环境配置 ubuntu下安装软件…...

数学建模——确定性时间序列分析方法

目录 介绍 确定性时间序列分析方法 1、时间序列的常见趋势 &#xff08;1&#xff09;长期趋势 &#xff08;2&#xff09;季节变动 &#xff08;3&#xff09;循环变动 &#xff08;4&#xff09;不规则变动 常见的时间序列模型有以下几类 2、时间序列预测的具体方法 …...

Opencv——颜色模型+通道分离与合并

视频加载/摄像头调用 VideoCapture允许一开始定义一个空的对象 VideoCapture video VideoCapture(const String &filename,int apiPreferenceCAP_ANY) filename:读取的视频文件或者图像序列名称 apiPreference:读取数据时设置的属性&#xff0c;例如编码格式、是否调用Op…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...