用Python的Tkinter做一个既高颜值又好用的计算器

建议学过Python几年的来学习,初学者可能听不懂

tkinter是一个用于弹窗的模块,相对较难,是比较权威的,想对我以前说的ybc_box来讲比较高级,但是缺点也很明显,就是不易上手!

这次也是需要用到ybc_box的喲!(呦)

秘籍宝典又来了:

  1. win + R + Enter
  2. pip install 模块名(这次是ybc_box和tkinter)
  3. Enter,等待结果

这次分为两个代码文件

附上代码喽!

comp_main.py            一定要命名为这个!

import tkinter
import tkinter.fontclass Calculator(object):def __init__(self):self.root = tkinter.Tk()self.all_press_lists = []  # 保存运算数字和符号的列表self.is_press_compute = False  # 判断是否按下运算按钮,默认没有按下self.result = tkinter.StringVar()  # 显示输入的数字及结果self.record = tkinter.StringVar()  # 显示计算过程def main(self, input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg):self.root.minsize(300, 550)  # 显示框的最小长宽self.root.title('计算器')  # 标题btn_w, btn_h = 75, 70  # 按钮的长宽my_font = tkinter.font.Font(family='微软雅黑', size=20)  # 设置字体self.result.set(0)self.record.set('')# 显示版label = tkinter.Label(self.root, font=tkinter.font.Font(family='微软雅黑', size=20), bg=input_bg, bd='9', fg=num_fg, anchor='se',textvariable=self.record)label.place(width=300, height=120)label2 = tkinter.Label(self.root, font=tkinter.font.Font(family='微软雅黑', size=30), bg=input_bg, bd='9', fg=num_fg, anchor='se',textvariable=self.result)label2.place(y=120, width=300, height=80)# 第一行btn_ac = tkinter.Button(self.root, text='C', font=tkinter.font.Font(family='微软雅黑', size=15), bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('AC'))btn_ac.place(x=btn_w * 0, y=200 + btn_h * 0, width=btn_w, height=btn_h)btn_back = tkinter.Button(self.root, text='Del', font=tkinter.font.Font(family='微软雅黑', size=15), bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('b'))btn_back.place(x=btn_w * 3, y=200 + btn_h * 0, width=btn_w, height=btn_h)btn_per = tkinter.Button(self.root, text='%', font=my_font, bg=btn_bg, fg=btn_fg, bd=0,command=lambda: self.press_compute('%'))btn_per.place(x=btn_w * 0, y=200 + btn_h * 4, width=btn_w, height=btn_h)btn_divi = tkinter.Button(self.root, text='÷', font=my_font, bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('/'))btn_divi.place(x=btn_w * 2, y=200 + btn_h * 0, width=btn_w, height=btn_h)# 第二行btn7 = tkinter.Button(self.root, text='7', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('7'))btn7.place(x=btn_w * 0, y=200 + btn_h * 1, width=btn_w, height=btn_h)btn8 = tkinter.Button(self.root, text='8', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('8'))btn8.place(x=btn_w * 1, y=200 + btn_h * 1, width=btn_w, height=btn_h)btn9 = tkinter.Button(self.root, text='9', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('9'))btn9.place(x=btn_w * 2, y=200 + btn_h * 1, width=btn_w, height=btn_h)btn_mul = tkinter.Button(self.root, text='×', font=my_font, bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('*'))btn_mul.place(x=btn_w * 1, y=200 + btn_h * 0, width=btn_w, height=btn_h)# 第三行btn4 = tkinter.Button(self.root, text='4', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('4'))btn4.place(x=btn_w * 0, y=200 + btn_h * 2, width=btn_w, height=btn_h)btn5 = tkinter.Button(self.root, text='5', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('5'))btn5.place(x=btn_w * 1, y=200 + btn_h * 2, width=btn_w, height=btn_h)btn6 = tkinter.Button(self.root, text='6', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('6'))btn6.place(x=btn_w * 2, y=200 + btn_h * 2, width=btn_w, height=btn_h)btn_sub = tkinter.Button(self.root, text='-', font=my_font, bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('-'))btn_sub.place(x=btn_w * 3, y=200 + btn_h * 2, width=btn_w, height=btn_h)# 第四行btn1 = tkinter.Button(self.root, text='1', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('1'))btn1.place(x=btn_w * 0, y=200 + btn_h * 3, width=btn_w, height=btn_h)btn2 = tkinter.Button(self.root, text='2', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('2'))btn2.place(x=btn_w * 1, y=200 + btn_h * 3, width=btn_w, height=btn_h)btn3 = tkinter.Button(self.root, text='3', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('3'))btn3.place(x=btn_w * 2, y=200 + btn_h * 3, width=btn_w, height=btn_h)btn_add = tkinter.Button(self.root, text='+', font=my_font, bg=btn_bg, fg=fh_fg, bd=0,command=lambda: self.press_compute('+'))btn_add.place(x=btn_w * 3, y=200 + btn_h * 1, width=btn_w, height=btn_h)# 第五行btn0 = tkinter.Button(self.root, text='0', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('0'))btn0.place(x=btn_w * 1, y=200 + btn_h * 4, width=btn_w ,height=btn_h)btn_point = tkinter.Button(self.root, text='.', font=my_font, bg=btn_bg, fg=num_fg, bd=0,command=lambda: self.press_num('.'))btn_point.place(x=btn_w * 2, y=200 + btn_h * 4, width=btn_w, height=btn_h)btn_equ = tkinter.Button(self.root, text='=', bg=is_bg, font=my_font, fg=is_fg, bd=0,command=lambda: self.press_equal())btn_equ.place(x=btn_w * 3, y=200 + btn_h * 3, width=btn_w, height=btn_h * 2)self.root.mainloop()# 按下数字def press_num(self, num):if self.is_press_compute is True:  # 如果判断运算按键被按下self.result.set(0)  # 清空self.resultself.is_press_compute = False# 判断界面的数字是否为0old_num = self.result.get()if old_num == '0':self.result.set(num)else:new_num = old_num + numself.result.set(new_num)# 按下运算符def press_compute(self, sign):num = self.result.get()self.all_press_lists.append(num)self.all_press_lists.append(sign)self.is_press_compute = Trueif sign == 'AC':  # 按下'C',清空列表内容,显示0self.all_press_lists.clear()self.result.set(0)if sign == 'b':  # 按下退格,当前数字逐步减一if num == '0':passelif len(num) > 1:a = num[0:-1]# self.all_press_lists.clear()self.result.set(a)num = self.all_press_lists.append(num)else:self.result.set(0)# 获取运算结果def press_equal(self):cur_num = self.result.get()self.all_press_lists.append(cur_num)compute_str = ''.join(self.all_press_lists)try:calculate_result = eval(compute_str)except:calculate_result = 'bad parameter'self.result.set(calculate_result)  # 显示结果# self.record.set(compute_str + "=")  # 显示运算过程self.all_press_lists.clear()  # 清空列表内容

第二段代码:

计算器.py      这个叫啥都没问题!

from comp_main import *
import ybc_box as boxcolor_list = ['暗夜黑', '清新绿', '蜜语红', '科技蓝', '星光白', '反色王']
color = box.buttonbox('请选择颜色:', color_list)
for i in color_list:if color == "暗夜黑":input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "#282828", "white", "white", "#282828", "white", "white", "grey"  # 各种颜色elif color == "清新绿":shq = box.buttonbox('请选择:', ['深色模式', '浅色模式'])if shq == '深色模式':input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "black", "white", "white", "black", "black", "#78C878", "#419641"  # 各种颜色breakelse:input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "white", "black", "black", "white", "white", "#419641", "#78C878"  # 各种颜色breakelif color == "蜜语红":shq = box.buttonbox('请选择:', ['深色模式', '浅色模式'])if shq == '深色模式':input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "black", "white", "white", "black", "white", "#FF0000", "#FF0000"  # 各种颜色breakelse:input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "white", "black", "black", "white", "white", "#FF0000", "#FF0000"  # 各种颜色breakelif color == "科技蓝":shq = box.buttonbox('请选择:', ['深色模式', '浅色模式'])if shq == '深色模式':input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "black", "white", "white", "black", "black", "#00C8FF", "#00C8FF"  # 各种颜色breakelse:input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "white", "black", "black", "white", "white", "#0064FF", "#00C8FF"  # 各种颜色breakelif color == "星光白":input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "#FCFAF7", "black", "black", "#FCFAF7", "black", "black", "grey"  # 各种颜色elif color == "反色王":shq = box.buttonbox('请选择:', ['深色模式', '浅色模式'])if shq == '深色模式':input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "black", "white", "white", "black", "black", "white", "white"  # 各种颜色breakelse:input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg = "white", "black", "black", "white", "white", "black", "black"  # 各种颜色breakmy_calculator = Calculator()
my_calculator.main(input_bg, num_fg, btn_fg, btn_bg, is_fg, fh_fg, is_bg)

自己去看看它长啥样!

远不止三色,图片被压扁了,用Python的Tkinter做一个既高颜值又好用的计算器相关推荐

  1. 用python的tkinter做游戏(八)—— 实现图片在tkinter中自适应大小(自动匹配窗口)

    用python的tkinter做游戏 系列: 用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 用python自带的tkinter做游戏(二)-- 俄罗斯方块 篇 用python自带的t ...

  2. 三色螺旋线 -《跟小海龟学Python》案例代码

    今天分享新书<跟小海龟学Python>的案例代码:三色螺旋线. Python源代码: from turtle import * # 导入海龟绘图库 speed(0) # 快速绘制 # 计算 ...

  3. ubuntu命令 图片 壁纸_太简单了!1分钟把Win 10 高颜值的开屏锁屏壁纸存储到电脑!...

    各位官人们大家好,我是宇宙第一可爱还不接受反驳的挨踢妹!今天跟大家分享一个自带高颜值的功能:偷偷把Windows的锁屏壁纸保存到电脑! Win 10系统有一个非常棒的功能,叫做[Windows 聚焦] ...

  4. 【微信小程序】图片被压扁怎么办?在image中添加 mode=widthFix

    参考:http://www.jb51.net/article/116779.htm 下面这里参数是错的,不能用heightFix 官方说明:http://www.jb51.net/article/11 ...

  5. unity 打安卓包 华为手机图片被压扁

    加一行 Screen.SetResolution(Screen.width, Screen.height, true);

  6. flex-shrink 解决实际问题(flex-shrink:0避免图片被压扁)

    flex-shrink flex-shrink 属性指定了 flex 元素的收缩规则,默认值是1.在flex 元素的默认宽度之和大于容器的宽度时候,元素会发生收缩,其收缩的大小的依据是 flex-sh ...

  7. 【Python】用tkinter做一个采色器

    from tkinter import * colors = '''#FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #FFF0F ...

  8. Python 爬虫 + 人脸检测 —— 知乎高颜值图片抓取

    1 数据源 知乎 话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.lxml.AipFace,代码共 100 + 行 3 必要环境 Mac / ...

  9. rgb三色直方图的绘制

    三色和单色是一致的:程序的写法在下一个CSDN 不仅仅是RGB还有HSV图像都会有比较重要的画法:色调,饱和度,亮度 绘制三色直方图还是三种向量的直方图都会有意义: 1.参数准备: int bins= ...

  10. 【格局视野】三色需求与工作层次

    三色需求 人们的社会经济生活本身就是一个互相交换,价值传递的循环,但这个循环有一个核心,这个核心就是社会大众的需求,也可以称为市场需求,围绕这个需求产生了层级递进的需求关系. 第一个层次是蓝色需求 是 ...

最新文章

  1. 自然语言处理(NLP)之pyltp的介绍与使用(中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注)
  2. Innodb与MySQL各自功能
  3. 作为一个程序员为什么要写博客?
  4. 为什么很多技术合伙人参与创业时会先谈钱?
  5. api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
  6. SpringCloud的Eureka客户端(解决自动退出问题)
  7. linux tcp前景,linux – 为什么在Xen下TCP接受()性能如此糟糕?
  8. html浮动div同行显示,div已经设了over-flow:auto;为什么没有滚动条浮动元素不能同行显示了,怎么办...
  9. 接口监控_从零开始入门 K8s | 可观测性:监控与日志
  10. c++输出的值精确到小数点后5位_直击灵魂——圆周率小数点后3位到12411亿位到底有啥用?...
  11. Java菜鸟教程 标识符
  12. 前加加 后加加 ++ 详解
  13. 【100%通过率】华为OD机试真题 JS 实现【预订酒店】【2023 Q1 | 100分】
  14. 【CXY】JAVA基础 之 Collection
  15. 单片机中推挽输出是什么意思
  16. 基于JAVA家装建材网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  17. 廖雪峰python教程笔记:装饰器
  18. 缓存架构设计之——Redis集群搭建
  19. 2013年山东省第四届ACM大学生程序设计竞赛
  20. 一个屌丝程序猿的人生(一百二十二)

热门文章

  1. Linux如何在屏幕上显示ASCII/中文字符
  2. uniapp开发小程序如何修改picker选中样式及选中字体样式
  3. Spring application使用@ 使用的问题:'@' that cannot start any token. (Do not use @ for indentation)
  4. 计算机属性cmd命令,怎么用命令提示符打开系统属性
  5. 多线程概念以及线程同步
  6. 万年历(hao123)代码
  7. PHP格式化 插件 vs code
  8. T9智能输入法实现原理和步骤
  9. 《烈烈先秦》9、世界奇迹的缔造者——全才冤臣蒙恬
  10. 高考2021加3科目成绩查询,官方解读:2021新高考实施方案正式公布,首选科目按原始分计入总成绩!...