使用python的tkinter库自制计算器ui界面
原理
tkinter库
主要使用label和button,具体了解看教程https://www.cnblogs.com/shwee/p/9427975.html
eval函数
这个函数能把字符串转化为代码执行,在这里对于简化代码很有帮助。
https://www.runoob.com/python/python-func-eval.html
源代码
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.title("calcutor")
equ = tk.StringVar()
equ.set("")
def backspace():
var = equ.get()
flag = 0
flag += var.count("+")
flag += var.count("-")
flag += var.count("*")
flag += var.count("/")
if "=" in var and flag <= 1:
k = var.index("=")
equ.set(var[:k])
else:
equ.set(equ.get()[:-1])
flag = 0
def show(push_var):
equ.set(equ.get()+str(push_var))
def clear():
equ.set("")
def calculate():
var=equ.get()
if "=" in var:
k=var.index("=")
equ.set(var[k+2:])
try:
result = eval(equ.get())
equ.set(equ.get()+ "=\n" + str(result))
except Exception:
tkinter.messagebox.showerror(title='fail', message='check your input please')
l=tk.Label(root,bg='black',fg='white',width=25,height=2,relief="raised",textvariable=equ)
l.grid(row=0,column=0,padx=5,pady=5,columnspan=4)
tk.Button(root,text="C",width=5,command=clear).grid(row=1,column=0)
tk.Button(root,text="÷",width=5,command=lambda:show("/")).grid(row=1,column=1)
tk.Button(root,text="x",width=5,command=lambda:show("*")).grid(row=1,column=2)
tk.Button(root,text="DEL",width=5,command=backspace).grid(row=1,column=3)
tk.Button(root,text="7",width=5,command=lambda:show("7")).grid(row=2,column=0)
tk.Button(root,text="8",width=5,command=lambda:show("8")).grid(row=2,column=1)
tk.Button(root,text="9",width=5,command=lambda:show("9")).grid(row=2,column=2)
tk.Button(root,text="-",width=5,command=lambda:show("-")).grid(row=2,column=3)
tk.Button(root,text="4",width=5,command=lambda:show("4")).grid(row=3,column=0)
tk.Button(root,text="5",width=5,command=lambda:show("5")).grid(row=3,column=1)
tk.Button(root,text="6",width=5,command=lambda:show("6")).grid(row=3,column=2)
tk.Button(root,text="+",width=5,command=lambda:show("+")).grid(row=3,column=3)
tk.Button(root,text="1",width=5,command=lambda:show("1")).grid(row=4,column=0)
tk.Button(root,text="2",width=5,command=lambda:show("2")).grid(row=4,column=1)
tk.Button(root,text="3",width=5,command=lambda:show("3")).grid(row=4,column=2)
tk.Button(root,text="=",width=5,height=2,command=calculate).grid(row=4,column=3,rowspan=2)
tk.Button(root,text="%",width=5,command=lambda:show("%")).grid(row=5,column=0)
tk.Button(root,text="0",width=5,command=lambda:show("0")).grid(row=5,column=1)
tk.Button(root,text=".",width=5,command=lambda:show(".")).grid(row=5,column=2)
root.mainloop()
效果

细节
1.除法显示为"/"。
2.支持连续运算。
3.delet键删除会判断有几个运算符,然后再决定删除等号后的所有字符还是结尾一个字符。
使用python的tkinter库自制计算器ui界面的更多相关文章
- Python+PyQT5的子线程更新UI界面的实例《新手必学》
今天小编就为大家分享一篇Python+PyQT5的子线程更新UI界面的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧子线程里是不能更新UI界面的,在移动端方面.Android的U ...
- deepin下安装python的Tkinter库
在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...
- tkinter 实现爬虫的UI界面
使用python的内置模块tkinter编写了爬取51Ape网站(无损音乐的百度云链接)的UI界面 tkinter入门简单, 但同时在编写的过程中因为文档的缺少很不方便. 下面是UI界面模块的编写,由 ...
- Linux下使用Python的Tkinter库出现的No module named _tkinter问题
这是由于python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在linux才出现,windows版本一般已经包含了tkinter模块.
- 程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理
事件类型用户通过鼠标.键盘.游戏控制设备在与图形界面交互时,就会触发事件.tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型.事件类型有其通用的定义方式 ...
- Python:GUI库tkinter(三)
这一章是对前两章的总结: Python:GUI库tkinter(一) Python:GUI库tkinter(二) 前两章是对控件的介绍,第一章可以知道各控件使用时的具体参数,第二章以具体的例子展示了每 ...
- Python:GUI库tkinter(二)
学习自: Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) - 洪卫 - 博客园 Tkinter简明教程 - 知乎 TkDocs_官方文档 一个Tkinter库较为全面的总结,很 ...
- python小实例——tkinter实战(计算器)
一.完美计算器实验一 import tkinter import math import tkinter.messagebox class calculator: #界面布局方法 def __init ...
- python 各种开源库
测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...
- Python GUI - tkinter
目录: Tkinter 组件 标准属性 几何管理 代码实例: 1. Label & Button 2. Entry & Text 3.Listbox列表 4.Radiobutton单选 ...
随机推荐
- java基础之“在后端使用爬虫Jsoup工具根据标签id获取字符串中的标签html代码(java后端实现前端根据标签id获取标签对象)”
一.场景 在电商项目中产品描述时必不可少的存在,每个不同的项目所需的描述不同,不能一概而论 在产品的描述中的部分数据是我们所需要的,如价格,尺码表等 如何在不依靠前端的前提下,完成数据的提取就成了问题 ...
- CentOS 7.6安装nginx
1.安装EPEL仓库 [root@ecs-lanxinmeichen nginx]# sudo yum install epel-releaseLoaded plugins: fastestmirro ...
- 用脚手架创建odoo15项目
Odoo 提供了一种机制来帮助建立一个新模块,odoo-bin有一个子命令脚手架来创建一个空模块 命令: $ odoo-bin scaffold <module name> <whe ...
- 堆排序算法Java实现
摘要 介绍堆排序的基本概念及其实现. 前言 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.这里讲的排序是内排序 ...
- Prometheus配置文件详解
概述 Prometheus是一个开源的系统监控和警报工具包.它的配置文件通常命名为prometheus.yml,用于配置Prometheus服务器的行为. 其配置文件主要包含以下几个部分: globa ...
- C# Task 取消执行的简单封装
我让DeepSeek帮我写了一段使用 CancellationTokenSource 取消任务的简单示例如下: 取消任务的简单示例 using System.Threading.Tasks; usin ...
- 【C语言/C++】你知道线程安全代码到底是怎么编写的吗?
相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你. 夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出来. 可这是为什么 ...
- 爬虫(2)——requests以及xpath的使用
一.requests requests.request(method,url,**kwargs) # 常见参数 # params/data/json 上传数据 # files 上传文件 # heade ...
- 运用servlet来实现文件的上传与下载
文件的上传: 1 /** 2 * 1. 文件的上传必须使用post请求,因为get请求的数据是在 url地址上, 但是url地址 3 * 能够携带数据大小是有限:2k 4k 4 * 2. 文件上传必须 ...
- FlashAttention安装失败的一种可能的原因,nvcc -V与nvidia-smi显示的CUDA版本号不一样
$ pip install flash-attn --no-build-isolation 报错 RuntimeError: FlashAttention is only supported on C ...