原理

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界面的更多相关文章

  1. Python+PyQT5的子线程更新UI界面的实例《新手必学》

    今天小编就为大家分享一篇Python+PyQT5的子线程更新UI界面的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧子线程里是不能更新UI界面的,在移动端方面.Android的U ...

  2. deepin下安装python的Tkinter库

    在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...

  3. tkinter 实现爬虫的UI界面

    使用python的内置模块tkinter编写了爬取51Ape网站(无损音乐的百度云链接)的UI界面 tkinter入门简单, 但同时在编写的过程中因为文档的缺少很不方便. 下面是UI界面模块的编写,由 ...

  4. Linux下使用Python的Tkinter库出现的No module named _tkinter问题

    这是由于python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在linux才出现,windows版本一般已经包含了tkinter模块.

  5. 程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理

    事件类型用户通过鼠标.键盘.游戏控制设备在与图形界面交互时,就会触发事件.tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型.事件类型有其通用的定义方式 ...

  6. Python:GUI库tkinter(三)

    这一章是对前两章的总结: Python:GUI库tkinter(一) Python:GUI库tkinter(二) 前两章是对控件的介绍,第一章可以知道各控件使用时的具体参数,第二章以具体的例子展示了每 ...

  7. Python:GUI库tkinter(二)

    学习自: Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) - 洪卫 - 博客园 Tkinter简明教程 - 知乎 TkDocs_官方文档 一个Tkinter库较为全面的总结,很 ...

  8. python小实例——tkinter实战(计算器)

    一.完美计算器实验一 import tkinter import math import tkinter.messagebox class calculator: #界面布局方法 def __init ...

  9. python 各种开源库

    测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...

  10. Python GUI - tkinter

    目录: Tkinter 组件 标准属性 几何管理 代码实例: 1. Label & Button 2. Entry & Text 3.Listbox列表 4.Radiobutton单选 ...

随机推荐

  1. 17.8K star!完美超越宝塔的产品,像呼吸一样部署应用,这款开源神器绝了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Dokploy是一个强大的开源平台,旨在简化全栈 Web 应用的开发和部署.通过其直观的界面 ...

  2. Sentinel——热点规则

    目录 热点规则 配置热点规则 API配置热点规则 热点规则 热点规则是用于实现热点参数限流的规则.热点参数限流指的是,在流控规则中指定对某方法参数的 QPS 限流后,当所有对该资源的请求URL中携带有 ...

  3. 【记录】JS和C++的Base64编码解码(支持中文)

    JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...

  4. 【笔记】Excel 2021|VBA不可不说的注意事项(第一篇)|VBA精准控制选择范围、VBA提高运行速度并降低运行时的内存消耗

      最近总是遇到只有Excel表.没有数据库的情况,不太可能让别人搭Python环境来建数据库,但对常用数据库的使用也不太熟悉,也没买服务器不能让别人远程操控.再加上Python操作Excel的效率令 ...

  5. JS如何实现远程控制:一步步教你掌握技术

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  6. Friend Circles(dfs)——LeetCode进阶路

    原题链接https://leetcode.com/problems/friend-circles/ 题目描述 There are N students in a class. Some of them ...

  7. windows安装node.js加配置淘宝镜像

    下载:https://nodejs.org/en/download/ 一路默认,或者选自己的路径,装好后打开cmd, 输入 node --version 显示版本. 是的,环境自己就配置好了! 配置淘 ...

  8. Spring中的单例Bean是线程安全的吗

    前言   Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean ...

  9. CF contest 1935 Round 932 (Div. 2) A-D题解

    Codeforces Round 932 (Div. 2) A-D题解 Codeforces Round 932 (Div. 2) 绪言 很菜,AB速度慢,卡在C,想DP,但是时间优化不下来,说服自己 ...

  10. Doxygen基本使用教程

    前言 规范的注释是一个良好的编程习惯. Doxygen可以直接将注释提取为程序文档,便于开发人员使用 本文主要介绍了Doxygen的使用方法,更多细节请阅读官方文档 一.Doxygen是什么? dox ...