举一反三学python(12)—制作简易计算器

news2024/12/21 10:17:44

        下图为简易、实用的计算器的效果图,今天展示用百行代码完成。

eb6e2ce563ee44c7a79561c5cbca1f5c.png

一、导入模块

import tkinter as tk

二、整体布局

win = tk.Tk()                         # 实例化一个窗体对象

win.title('简易计算器')           # 窗口标题
win.geometry('295x280')          # 窗口大小
win.attributes('-alpha', 0.9)       # 透明度
win["background"] = '#ffffff'       # 背景色

三、面板部分

1、 输入框

result_num = tk.StringVar()
result_num.set('')
tk.Label(win,textvariable=result_num,font=('宋体', 20),
         height=2,width=20,justify=tk.LEFT,anchor=tk.SE
         ).grid(row=1, column=1, columnspan=4)               # 网格布局

2、 第一行按钮C、%、/、X

# 按钮内容和样式
b_clear = tk.Button(win, text='C', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')  # relief对齐样式:水平
b_per = tk.Button(win, text='%', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')
b_division = tk.Button(win, text='/', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')
b_multipli = tk.Button(win, text='X', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')
# 按钮布局
b_clear.grid(row=2, column=1, padx=4, pady=2)
b_per.grid(row=2, column=2, padx=4, pady=2)
b_division.grid(row=2, column=3, padx=4, pady=2)
b_multipli.grid(row=2, column=4, padx=4, pady=2)

3、 第二行按钮7、8、9、-

b_7 = tk.Button(win, text='7', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_8 = tk.Button(win, text='8', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_9 = tk.Button(win, text='9', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_subtraction = tk.Button(win, text='—', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')

b_7.grid(row=3, column=1, padx=4, pady=2)
b_8.grid(row=3, column=2, padx=4, pady=2)
b_9.grid(row=3, column=3, padx=4, pady=2)
b_subtraction.grid(row=3, column=4, padx=4, pady=2)

4、 第三行按钮4、5、6、+

b_4 = tk.Button(win, text='4', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_5 = tk.Button(win, text='5', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_6 = tk.Button(win, text='6', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_add = tk.Button(win, text='+', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')

b_4.grid(row=4, column=1, padx=4, pady=2)
b_5.grid(row=4, column=2, padx=4, pady=2)
b_6.grid(row=4, column=3, padx=4, pady=2)
b_add.grid(row=4, column=4, padx=4, pady=2)

5、 第四行按钮1、2、3、=

b_1 = tk.Button(win, text='1', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_2 = tk.Button(win, text='2', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_3 = tk.Button(win, text='3', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
# 等号跨行显示,高度、行宽增加
b_equal = tk.Button(win, text='=', width=5, height=3, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')

b_1.grid(row=5, column=1, padx=4, pady=2)
b_2.grid(row=5, column=2, padx=4, pady=2)
b_3.grid(row=5, column=3, padx=4, pady=2)
b_equal.grid(row=5, column=4, padx=4, pady=2, rowspan=2)

6、 第五行按钮0、.

# 0跨列显示,宽度、列跨度增加
b_0 = tk.Button(win, text='0', width=12, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')
b_dot = tk.Button(win, text='.', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')

b_0.grid(row=6, column=1, padx=4, pady=2, columnspan=2)
b_dot.grid(row=6, column=3, padx=4, pady=2)

四、逻辑部分

1、 显示函数

def click_button(x):
    # print('x:\t',x)            # 检测显示效果
    result_num.set(result_num.get()+x)

2、 运算函数

def operation():
    opt_str = result_num.get()
    result = eval(opt_str)
    result_num.set(str(result))

3、 按键命令

b_1.config(command=lambda: click_button('1'))
b_2.config(command=lambda: click_button('2'))
b_3.config(command=lambda: click_button('3'))
b_4.config(command=lambda: click_button('4'))
b_5.config(command=lambda: click_button('5'))
b_6.config(command=lambda: click_button('6'))
b_7.config(command=lambda: click_button('7'))
b_8.config(command=lambda: click_button('8'))
b_9.config(command=lambda: click_button('9'))
b_0.config(command=lambda: click_button('0'))
b_add.config(command=lambda: click_button('+'))
b_subtraction.config(command=lambda: click_button('-'))
b_multipli.config(command=lambda: click_button('*'))
b_division.config(command=lambda: click_button('/'))
b_dot.config(command=lambda: click_button('.'))
b_clear.config(command=lambda: result_num.set(''))

b_per.config(command=lambda: click_button('/100'))
b_equal.config(command=operation)

五、 运行

win.mainloop()

六、效果演示

QQ录屏20230509105355

哈哈,大功告成!效果杠杠的,我在里面添加了‘防伪标志’。

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

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

相关文章

ESP8266图形播放器 + 天气时钟显示项目更新

<fontcolor=green>ESP8266图形播放器 + 天气时钟显示项目更新 🎞原项目播放效果演示:https://www.ixigua.com/6968269356820070912?logTag=f37e7f1f5cefa9876746✨由于有些库的更新以及API调用接口的失效,特此更新,内容上做了精简和优化。⚡由于所调用的库比较多,…

IPWorks VoIP 2022.0.8505 C++ Edition

IPWorks VoIP IPWorks VoIP 2022 C Edition 支持常见 SIP 和 IVR 操作的简单 VoIP 库。 网络语音组件 IPWorks VoIP 提供 SIP 和 IVR 组件&#xff0c;旨在促进 CTI 应用中的常见 VoIP 操作。快速集成功能&#xff0c;以根据您的自定义 IVR 菜单建立拨出呼叫、接听来电和路由呼…

kt:reified和sam转换(Single Abstract Method Conversions)

什么是refied关键字 ​由于我们都知道Kotlin和Java一样都存在着泛型擦除问题&#xff0c;而Kotlin它知道Java所带来的这个问题&#xff0c;所以对此Kotlin留了一个后门&#xff0c;就是通过inline函数保证使得泛型类的类型实参在运行时能够保留&#xff0c;这样的操作 Kotlin 中…

使用OpenCV部署全景驾驶感知网络YOLOP

开源项目 MCnet 是一个神经网络模型&#xff0c;用于实现车辆视觉感知的任务&#xff0c;比如车道线检测、行驶区域分割和物体检测等。MCnet 的全称是 Multitask CNN&#xff0c;它在单个神经网络模型中集成了多个任务的网络结构&#xff0c;可以同时对输入图像进行多个任务的…

Day964.从持续构建到持续集成 -遗留系统现代化实战

从持续构建到持续集成 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于从持续构建到持续集成的内容。 如何修改后的代码可以“火速”部署到生产环境里&#xff0c;这样才能提高整个端到端的交付效率&#xff0c;让每次改动工作都能及时得到反馈&#xff0c;尽快验证…

看火山引擎DataLeap如何做好电商治理(二):案例分析与解决方案

接上篇&#xff0c;以短视频优质项目为例&#xff0c;火山引擎DataLeap平台治理团队会去对每天发布的这种挂购物车车短视频打上标签&#xff0c;识别这些短视频它是优质的还是低质的&#xff0c;以及具体原因。一个视频经过这个模型识别之后&#xff0c;会给到奖惩中心去做相应…

聊一聊 用 dotnet-trace 调查 lock锁竞争

一&#xff1a;背景 1. 讲故事 最近在分析一个 linux 上的 dump&#xff0c;最后的诱因是大量的lock锁诱发的高频上下文切换&#xff0c;虽然问题告一段落&#xff0c;但我还想知道一点信息&#xff0c;所谓的高频到底有多高频&#xff1f;锁竞争到底是一个怎样的锁竞争&…

将训练好的模型保存在服务端的三种办法

刚刚在完善我书中第七章案例的文档时&#xff0c;需要将训练好的模型存储在服务端&#xff0c;方便小伙伴们来使用该模型&#xff0c;这里我提供三种办法&#xff1a; 直接从我的个人网站中加载&#xff1b;通过python启动一个文件下载服务器&#xff1b;使用微信小程序云存储…

windows10+detectron2完美安装教程

文章目录 前言下载detectron2安装Visual Studio 2019修改代码 前言 需要下载detectron2的github项目&#xff0c;安装vs2019 (强烈建议这个版本&#xff0c;其他的版本需要做更多地操作才能成功安装)&#xff0c;默认其他环境没问题。 下载detectron2 链接&#xff1a;https…

【来点小剧场--爪哇岛寻宝】java实现网络编程,写一个简易的回显服务程序

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络编程的文章&#xff0c;在这篇文章中我会剖析一段回显服务程序的执行步骤和代码编程&#xff0c;希望对你有所帮助&#xff01; 目录 客户端 服务端 总结 客户端 现在我们…

Postman完全卸载步骤

一、卸载应用程序 我们首先正常右键点击卸载通过windows程序卸载功能来卸载postman应用程序。 二、删除文件 &#xff08;1&#xff09;删除AppData》Roadming下的postman文件夹 &#xff08;2&#xff09;删除AppData》Roadming》\Microsoft\Windows\Start Menu\Programs下的p…

态势感知与信质、信量

未来的新智能是人机环境系统智能&#xff0c;而人机融合的态势感知是其关键&#xff0c;简单地说&#xff0c;态势感知&#xff08;situation awareness&#xff09;就是智能体在“一定时间和空间环境中的元素的感知&#xff0c;对它们的含义的理解&#xff0c;并对他们稍后状态…

uni——调用子组件失败解决方法($nextTick)

案例说明 调用子组件内的方法或者属性赋值报错的 this.$refs.goodsOrder.list [ ]解决代码 在外层包裹this.$nextTick(() > { 数据 }) this.$nextTick(() > {this.$refs.goodsOrder.list [] })

【JAVA面试】JVM

提示&#xff1a;文章先作为初版&#xff0c;等后续时间充足后&#xff0c;补充更深的内容 文章目录 JVM一、垃圾回收算法二、什么是STW三、JVM参数四、JVM内存模型 JVM 一、垃圾回收算法 JVM中的垃圾回收算法可以分为两种类型&#xff1a;基于引用计数的垃圾回收算法和基于可…

国考省考行测:数字推理题,趋势平缓作差,趋势陡峭看平方乘积,根号数列平方,分数小数拆开看

国考省考行测&#xff1a;数字推理题&#xff0c;趋势平缓作差&#xff0c;趋势陡峭看平方乘积&#xff0c;根号数列平方&#xff0c;分数小数拆开看 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考…

【Unity3D】Shader变体管理流程-变体剔除

一、什么是Shader变体管理 想要回答这个问题&#xff0c;要看看什么是Shader变体。 1. 变体 我们用ShaderLab编写Unity中的Shader&#xff0c;当我们需要让Shader同时满足多个需求&#xff0c;例如说&#xff0c;这个是否支持阴影&#xff0c;此时就需要加keyword&#xff08;…

强化学习p1-基本概念

Terminologies(名词) 状态(State) 每个时刻&#xff0c;环境有一个状态 (state)&#xff0c;可以理解为对当前时刻环境的概括 状态(State) 有时也被称为观测(Observation)&#xff0c;因为有时智能体并不能观测到环境改变后的全部&#xff0c;只能观测到部分。 环境(Environm…

计算机毕业论文内容参考|软件工程|网络流量异常信息分析方法研究

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望导文 网络流量异常信息分析方法研究 文章重点 摘要 本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检…

OpenCV教程——处理图像像素及图像掩膜

1.像素值 像素值是图像被数字化时由计算机赋予的值&#xff0c;代表了图像中某一小方块&#xff08;即【像素点】&#xff09;的平均亮度信息。 灰度图像通常用8位表示一个像素&#xff0c;这样总共有256个灰度等级&#xff08;像素值在0&#xff5e;255之间&#xff09;。 …

最值得推荐的免费分区管理软件

磁盘管理是 Windows 的内置工具&#xff0c;用于操作硬盘上的分区&#xff0c;但自 Windows XP 以来直到Windowa11 该程序几乎没有变化。个人测试了五个备选方案&#xff0c;以了解它们之间的比较。 奇客分区 默认的分区个数根据磁盘大小&#xff1f;需要重新划分分区&#xf…