如何在 Python 中创建一个类似于 MS 计算器的 GUI 计算器

在这里插入图片描述

  1. 问题背景

假设我们需要创建一个类似于微软计算器的 GUI 计算器。这个计算器应该具有以下功能:

  • 能够显示第一个输入的数字。
  • 当按下运算符时,输入框仍显示第一个数字。
  • 当按下第二个数字时,第一个数字被替换。
  1. 解决方案

为了解决这个问题,我们需要使用状态的概念。每次按下按键时,检查状态并确定要采取的操作。

  • 起始状态:输入数字。
  • 当按下运算符按钮时:存储运算符,改变状态。
  • 当按下另一个数字时:存储数字,清除数字输入,重新开始数字输入。
  • 当按下等号按钮时:使用存储的数字和运算符以及数字输入中的当前数字,执行操作。

使用动态语言,例如 Python,可以改变处理按键/按钮按下事件的函数,而不是使用变量和 if 语句来检查状态。

import tkinter as tkclass Calculator:def __init__(self):self.window = tk.Tk()self.window.title("Calculator")# 创建显示屏self.display = tk.Entry(self.window, width=30)self.display.grid(row=0, column=0, columnspan=4)# 创建数字按钮self.buttons = [["7", "8", "9", "/"],["4", "5", "6", "*"],["1", "2", "3", "-"],["0", ".", "=", "+"]]# 创建运算符按钮self.operators = ["/", "*", "-", "+"]# 创建状态变量self.state = "number"# 创建数字列表self.numbers = []# 创建运算符列表self.operators = []# 创建计算结果变量self.result = None# 创建按钮for row in range(4):for column in range(4):button = tk.Button(self.window, text=self.buttons[row][column], command=lambda row=row, column=column: self.handle_button_press(row, column))button.grid(row=row+1, column=column)def handle_button_press(self, row, column):# 获取按钮值button_value = self.buttons[row][column]# 检查按钮值是否是数字if button_value in "0123456789.":# 如果是数字,则将数字添加到数字列表self.numbers.append(button_value)# 更新显示屏self.display.delete(0, tk.END)self.display.insert(0, "".join(self.numbers))# 检查按钮值是否是运算符elif button_value in self.operators:# 如果是运算符,则将运算符添加到运算符列表self.operators.append(button_value)# 改变状态self.state = "operator"# 更新显示屏self.display.delete(0, tk.END)self.display.insert(0, "".join(self.operators))# 检查按钮值是否是等号elif button_value == "=":# 如果是等号,则执行计算self.result = eval("".join(self.numbers) + self.operators[0] + "".join(self.numbers))# 更新显示屏self.display.delete(0, tk.END)self.display.insert(0, self.result)# 重置状态self.state = "number"# 清空数字列表和运算符列表self.numbers = []self.operators = []def run(self):self.window.mainloop()if __name__ == "__main__":calculator = Calculator()calculator.run()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机考题(HJ108 求最小公倍数)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 数据范围:1≤…

Spring中的适配器模式和策略模式

1. 适配器模式的应用 1.1适配器模式(Adapter Pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 1.2 AOP中的适配器模式 在Spring的AOP中,使用Advice&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

集群管理脚本

虚拟机集群管理脚本 文章目录 虚拟机集群管理脚本一、远程调用脚本(remote_call.sh)二、远程复制目录脚本(remote_copy.sh) 一、远程调用脚本(remote_call.sh) 如果有传命令参数,则执行该命令;如果没有传命令参数,则不执行。 #!/bin/bashcm…

【嵌入式Linux】<知识点> GDB调试(更新中)

文章目录 前言 一、GDB调试预备工作 二、GDB的启动与退出 三、GDB中查看源代码 四、GDB断点操作 五、GDB调试指令 前言 在专栏【嵌入式Linux】应用开发篇_Linux打工仔的博客中,我们已经写了大量的源程序。但是在调试这些程序时我们都是通过printf大法和肉眼除…

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score)

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score) 前言相关介绍1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Re…

Cadence23打开与关闭飞线,修改位号丝印大小

打开与关闭所有飞线: 显示部分飞线: 单独显示网络飞线尤为好用,点击上图中的网络,之后鼠标点击器件中你想高亮的网络即可单独打开部分飞线。 这里的关闭部分网络的飞线也很好用,可以临时关闭讨厌的GND飞线&#xff1a…

掌握Postman的API请求模板:一键生成,效率倍增

📘 掌握Postman的API请求模板:一键生成,效率倍增 Postman是API开发和测试的瑞士军刀,而其请求模板功能更是提升工作效率的利器。API请求模板允许用户定义一组可重用的请求配置,从而快速生成和发送API请求。本文将深入…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下:这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

TF卡病毒是什么?如何防范和应对?

在存储芯片及存储卡领域,TF卡病毒是一个备受关注的话题。在本文中,拓优星辰将详细解释TF卡病毒的含义、来源以及如何防范和应对这一问题,帮助客户更好地了解和处理TF卡病毒的风险。 1. TF卡病毒的含义 TF卡病毒是指针对TF存储卡(T…

05:定时器中断

中断 1、定时器T0中断2、案例:通过定时器T0中断来实现灯间隔1s亮灭 1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方…

安装lap和cython_bbox失败了很多次!!!终于被我发现了!

先说 lap 试了很多种方式,pip install lap / conda install -c conda-forge lap … 全失败了后面发现 lap 不支持 python > 3.9 的版本使用 pip install lapx 成功! cython_bbox 更难了 一直提示缺少MicroSoft C 14.0 … 大家有需要自行下载&#x…

[PaddlePaddle飞桨] PaddleDetection-通用目标检测-小模型部署

PaddleDetection的GitHub项目地址 推荐环境: PaddlePaddle > 2.3.2 OS 64位操作系统 Python 3(3.5.1/3.6/3.7/3.8/3.9/3.10),64位版本 pip/pip3(9.0.1),64位版本 CUDA > 10.2 cuDNN > 7.6pip下载指令: python -m pip i…

面向本科生的智能品牌传播策略优化

面向本科生的智能品牌传播策略优化 一、引言 在数字化时代,品牌传播已不再是简单的信息传递,而是需要借助智能技术实现精准、高效、创新的传播策略。作为本科毕业生,选择“面向本科生的智能品牌传播策略优化实践”作为研究课题,不仅有助于深入理解品牌传播的理论知识,还…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…

易我分区大师18.8.0更新:两大功能改进

近日,易我分区大师18.8.0更新上线。此次更新重点改进了系统克隆功能,支持从第二块系统盘(从盘)克隆系统;同时,软件支持将分区的文件系统格式从FAT转换成exFAT。 01、系统克隆 系统克隆功能旨在帮助用户在…

pinia学习

conuter.ts <template><div><!-- 显示当前的计数 --><p>Count: {{ count }}</<!-- 显示计算的双倍计数 --><p>Double Count: {{ doubleCount }}</p><!-- 点击按钮以增加计数 --><button click"increment">…

基于红黑树对map和set的封装

前言 前面我们已经对红黑树做了介绍和实现&#xff0c;本期我们来对红黑树进一步改造&#xff0c;然后基于改造后的红黑树封装出map和set&#xff01; 本期内容介绍 • 红黑树的改造 • 红黑树的迭代器实现 • map的封装 • set的封装 • 全部源码 ● 红黑树的改造 我们目前…

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…