个性化Python GUI计算器搭建

大家好,本文将介绍在Python中使用Tkinter几分钟内制作自己的全功能GUI计算器。

要完成所提到的功能,除了通常随Python标准库一起安装的Tkinter之外,不需要任何额外的库。

如果使用的是Linux系统,可能需要安装:

$ pip install python-tk

1.eval()解决数学问题

eval()是Python中的一个内置函数,它会解析表达式参数并将其作为Python表达式进行求值,下面使用eval()的概念来解决数学表达式。

>>> while True:
...     expression = input('Enter equation: ')
...     result = eval(expression)
...     print(result)
... 
Enter equation: 2 + (9/9) *3
5.0
Enter equation: 12 /9 + (18 -2) % 5
2.333333333333333

使用这4行代码,已经在Python中制作了一个命令行计算器,现在使用相同的概念来制作一个带有图形界面的计算器。

这个GUI计算器有三个主要部分:

  • 用于显示表达式的屏幕(框架)

  • 保存表达式值的按钮

  • 搭建计算器逻辑

2.为计算器制作框架

from tkinter import Tk, Entry, Button, StringVar
class Calculator:def __init__(self, master):master.title('Simple Calculator')master.geometry('360x260+0+0')master.config(bg='#438')master.resizable(False, False)
root = Tk()
calculator = Calculator(root)
root.mainloop()

输出:

3.添加一个屏幕显示表达式

from tkinter import Tk, Entry, Button, StringVar
class Calculator:def __init__(self, master):master.title('Simple Calculator')master.geometry('360x260+0+0')master.config(bg='#438')master.resizable(False, False)self.equation = StringVar()self.entry_value = ''Entry(width = 28,bg='lightblue', font = ('Times', 16), textvariable = self.equation).place(x=0,y=0)
root = Tk()
calculator = Calculator(root)
root.mainloop()

输出:

如上所示,已经完成显示屏幕的构建,现在需要添加一个按钮用于形成数学表达式。

4.添加用于形成数学表达式的按钮

这些按钮的创建方式相同,只是它们所存储的值和它们的位置不同。用于形成数学表达式的按钮包括:

  • 0到9的数字

  • 数学运算符+、-、/、%

  • 小数点

  • 括号()

为每个按钮附加一个命令,以便当点击时,它就会显示在显示屏上。为此,编写一个简单的show()函数来实现这个功能。

from tkinter import Tk, Entry, Button, StringVar
class Calculator:def __init__(self, master):master.title('Simple Calculator')master.geometry('360x260+0+0')master.config(bg='#438')master.resizable(False, False)self.equation = StringVar()self.entry_value = ''Entry(width = 28,bg='lightblue', font = ('Times', 16), textvariable = self.equation).place(x=0,y=0)Button(width=8, text = '(', relief ='flat', command=lambda:self.show('(')).place(x=0,y=50)Button(width=8, text = ')', relief ='flat', command=lambda:self.show(')')).place(x=90, y=50)Button(width=8, text = '%', relief ='flat', command=lambda:self.show('%')).place(x=180, y=50)Button(width=8, text = '1', relief ='flat', command=lambda:self.show(1)).place(x=0,y=90)Button(width=8, text = '2', relief ='flat', command=lambda:self.show(2)).place(x=90,y=90)Button(width=8, text = '3', relief ='flat', command=lambda:self.show(3)).place(x=180,y=90)Button(width=8, text = '4', relief ='flat', command=lambda:self.show(4)).place(x=0,y=130)Button(width=8, text = '5', relief ='flat', command=lambda:self.show(5)).place(x=90,y=130)Button(width=8, text = '6', relief ='flat', command=lambda:self.show(6)).place(x=180,y=130)Button(width=8, text = '7', relief ='flat', command=lambda:self.show(7)).place(x=0,y=170)Button(width=8, text = '8', relief ='flat', command=lambda:self.show(8)).place(x=180,y=170)Button(width=8, text = '9', relief ='flat', command=lambda:self.show(9)).place(x=90,y=170)Button(width=8, text = '0', relief ='flat', command=lambda:self.show(0)).place(x=0,y=210)Button(width=8, text = '.', relief ='flat', command=lambda:self.show('.')).place(x=90,y=210)Button(width=8, text = '+', relief ='flat', command=lambda:self.show('+')).place(x=270,y=90)Button(width=8, text = '-', relief ='flat', command=lambda:self.show('-')).place(x=270,y=130)Button(width=8, text = '/', relief ='flat', command=lambda:self.show('/')).place(x=270,y=170)Button(width=8, text = 'x', relief ='flat', command=lambda:self.show('*')).place(x=270,y=210)
def show(self, value):self.entry_value +=str(value)self.equation.set(self.entry_value)root = Tk()
calculator = Calculator(root)
root.mainloop()

输出:

输出是一个带有按钮的计算器,当点击其中任意一个按钮时,它的值就会显示在显示屏上。

现在计算器只剩下两个按钮就能完整,一个是重置按钮用于清除屏幕,另一个是等号(=)按钮,用于计算表达式并将结果显示在屏幕上。

5.为计算器添加重置和等号按钮

from tkinter import Tk, Entry, Button, StringVar
class Calculator:def __init__(self, master):master.title('Simple Calculator')master.geometry('360x260+0+0')master.config(bg='#438')master.resizable(False, False)self.equation = StringVar()self.entry_value = ''Entry(width = 28,bg='lightblue', font = ('Times', 16), textvariable = self.equation).place(x=0,y=0)
Button(width=8, text = '(', relief ='flat', command=lambda:self.show('(')).place(x=0,y=50)Button(width=8, text = ')', relief ='flat', command=lambda:self.show(')')).place(x=90, y=50)Button(width=8, text = '%', relief ='flat', command=lambda:self.show('%')).place(x=180, y=50)Button(width=8, text = '1', relief ='flat', command=lambda:self.show(1)).place(x=0,y=90)Button(width=8, text = '2', relief ='flat', command=lambda:self.show(2)).place(x=90,y=90)Button(width=8, text = '3', relief ='flat', command=lambda:self.show(3)).place(x=180,y=90)Button(width=8, text = '4', relief ='flat', command=lambda:self.show(4)).place(x=0,y=130)Button(width=8, text = '5', relief ='flat', command=lambda:self.show(5)).place(x=90,y=130)Button(width=8, text = '6', relief ='flat', command=lambda:self.show(6)).place(x=180,y=130)Button(width=8, text = '7', relief ='flat', command=lambda:self.show(7)).place(x=0,y=170)Button(width=8, text = '8', relief ='flat', command=lambda:self.show(8)).place(x=180,y=170)Button(width=8, text = '9', relief ='flat', command=lambda:self.show(9)).place(x=90,y=170)Button(width=8, text = '0', relief ='flat', command=lambda:self.show(0)).place(x=0,y=210)Button(width=8, text = '.', relief ='flat', command=lambda:self.show('.')).place(x=90,y=210)Button(width=8, text = '+', relief ='flat', command=lambda:self.show('+')).place(x=270,y=90)Button(width=8, text = '-', relief ='flat', command=lambda:self.show('-')).place(x=270,y=130)Button(width=8, text = '/', relief ='flat', command=lambda:self.show('/')).place(x=270,y=170)Button(width=8, text = 'x', relief ='flat', command=lambda:self.show('*')).place(x=270,y=210)Button(width=8, text = '=', bg='green', relief ='flat', command=self.solve).place(x=180, y=210)Button(width=8, text = 'AC', relief ='flat', command=self.clear).place(x=270,y=50)
def show(self, value):self.entry_value +=str(value)self.equation.set(self.entry_value)def clear(self):self.entry_value = ''self.equation.set(self.entry_value)def solve(self):result = eval(self.entry_value)self.equation.set(result)root = Tk()
calculator = Calculator(root)
root.mainloop()

最终输出类似下图的计算器:

在短短的五分钟内就可以成功使用Tkinter库搭建了一个Python GUI计算器,这个计算器可以进行基本的数学运算,并为用户提供了友好的交互体验。

搭建一个GUI计算器不仅仅是一个有趣的项目,它还展示了Python的强大和灵活性。希望本文对大家有所帮助,并激励进一步探索和开发更多有趣的GUI应用程序。

 

 

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

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

相关文章

Spring MVC组件

1.DispatcherServlet前端控制器 用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。 2.HandlerMappin…

【HarmonyOS】掌握 Stage 模型的核心概念与应用

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…

【Docker基础一】Docker安装Elasticsearch,Kibana,IK分词器

安装elasticsearch 下载镜像 查看版本:Elasticsearch Guide [8.11] | Elastic # 下载镜像 docker pull elasticsearch:7.17.16 # 查看镜像是否下载成功 docker images创建网络 因为需要部署kibana容器,要让es和kibana容器互联 # 创建一个网络&…

在生产环境中使用uWSGI来运行Flask应用

安装uwsgi pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple安装不上则使用以下命令: conda install -c conda-forge uwsgi 当您成功安装uwsgi后,您可以通过以下步骤来测试uwsgi是否安装成功: 创建一个Python脚本&#xff…

强化学习在生成式预训练语言模型中的研究现状简单调研

1. 绪论 本文旨在深入探讨强化学习在生成式预训练语言模型中的应用,特别是在对齐优化、提示词优化和经验记忆增强提示词等方面的具体实践。通过对现有研究的综述,我们将揭示强化学习在提高生成式语言模型性能和人类对话交互的关键作用。虽然这些应用展示…

《A++ 敏捷开发》- 3 克服拖延症

技术总监问:现在我遇到最大的难题就是如何提升下面技术人员的能力,如果他们全都是高手,我就很轻松了,但实际上高手最多只有 1/3,其他都是中低水平。你接触过这么多软件开发团队,有什么好方案? 我…

用PreMaint引领先进的预测性维护

在设备维护领域,预测性维护成为一项利用先进技术和巧妙工具的数据驱动战略。这一战略通过条件监控和数据分析,以主动维护的方式识别潜在的设备缺陷,避免问题升级。高效使用PreMaint预测性维护工具可不仅节省时间和成本,更显著提升…

Java药物不良反应ADR智能监测系统源码

药物不良反应(Adverse Drug Reaction,ADR)是指在使用合格药品时,在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用方式、个体差异等因素而异,可能导致患者身体不适、病情恶化。 为保…

什么事“网络水军”?他们的违法活动主要有四种形式

我国治理网络水军,包括造谣引流、舆情敲诈、刷量控评、有偿删帖等各类“网络水军”等违法犯罪活动已经许久。 日前,官方召开新闻发布会,公布了相关的一些案件进程,今年已累计侦办相关案件339起,超过历年的全年侦办案件…

深度解析HubSpot数据分析:洞察未来商业趋势

在当今数字化的商业环境中,数据是推动决策和业务增长的关键。作为业内领先的CRM平台,HubSpot不仅为企业提供了高效的客户关系管理工具,同时也成为了数据分析的利器。 1. HubSpot数据分析的核心价值 1.1 洞察客户行为和趋势 HubSpot数据分析…

【野火i.MX6ULL开发板】在MobaXterm平台利用Type-C线串口连接开发板

0、前言 参考文献: http://t.csdnimg.cn/9iRTm http://t.csdnimg.cn/Z0n60 问题:一直识别不出com口, 拟解决思路: 百度网盘重新下载Debian镜像,烧入full版镜像,随便换一下USB插口(电脑主机上…

一个大场景下无线通信仿真架构思路(对比omnet与训练靶场)

2020年分析过omnet的源码,读了整整一年,读完之后收获不小,但是也遗憾的发现这个东西只适合实验室做研究的人用于协议的研发与测试,并不适合大场景(军事游戏等)的应用,因为其固有架构更侧重于每个…

PostGIS学习教程二十:3-D

PostGIS学习教程二十:3-D 注意:本文介绍许多PostGIS2.0及更高版本才支持的功能。 文章目录 PostGIS学习教程二十:3-D一、3-D几何图形二、3-D函数三、N-D索引 一、3-D几何图形 到目前为止,我们一直在处理2-D几何图形(…

remote pdb使用记录

以前代码debug一直用原始的pdb,方便好用。最近接触的代码框架使用了ddp加速训练,导致pdb不好用了。 具体来说,在ddp训练时,用单卡训练,跟非ddp模式是一致的,python -m pdb xxx.py的模式也能正常用pdb。但是…

强化学习的数学原理学习笔记 - Actor-Critic

文章目录 概览:RL方法分类Actor-CriticBasic actor-critic / QAC🟦A2C (Advantage actor-critic)Off-policy AC🟡重要性采样(Importance Sampling)Off-policy PGOff-policy AC 🟦DPG (Deterministic AC) 本…

C#,入门教程(13)——字符(char)及字符串(string)的基础知识

上一篇: C#,入门教程(12)——数组及数组使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123918227 字符串的使用与操作是必需掌握得滚瓜烂熟的编程技能之一!!!!! C#语言实…

python接口自动化测试框架介绍

之前在项目中搞了一套jmeter jenkins git ant接口自动化测试框架,在项目中运行了大半年了,效果还不错, 最近搞了一套requests unittest ddt pymysql BeautifulReport的接口自动化测试框架, 测试用例在yaml文件中&#xff0c…

Java面向对象综合练习(拼图小游戏),用java图形化界面实现拼图小游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面,写一个项目,知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello,各位同学大家好。今天,我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…

MySQL语法及IDEA使用MySQL大全

在项目中我们时常需要写SQL语句,或简单的使用注解直接开发,或使用XML进行动态SQL之类的相对困难的SQL,并在IDEA中操控我们的SQL,但网上大都图方便或者觉得太简单了,完全没一个涵盖两个方面的讲解。 单表: …