不知道伙伴们有没有做过自主项目

反正我是闲的不行了……

对于一个程序猿来说,没有项目,就没有生(fu)命(dan)

于是乎,在我(bie ren)的热(yao)情(qiu)下

我开始了tkinter不寻常的计算器之路……

(以下是我的更新日志,留个纪念)

目录

1.0版本,一切的起点,交互的开端:

1.1版本,字符串与整数的交缠不休:

2.0版本,tkinter的首次亮相:

2.1版本,有些时候,简单更好:

2.2版本,与挑剔滚动条的周旋:

2.3版本,遇见万能的font:

3.0版本,不肯漏出蛛丝马迹的entry:

3.1版本(终极版本),官方之作未必最好:

终极代码,效果:


1.0版本,一切的起点,交互的开端:

这个没啥好说的,做了个框架而已

计算器1.0版本更新日志:
一、更新内容:添加了用户输入式交互系统输入运算数据,且初步将其转换成整数运算
二、问题点:当用户输入字符串时会报错——2022/5/14

1.1版本,字符串与整数的交缠不休:

直接int会报错

为了区分用户输入的内容是不是整数

我终于学会了try……

计算器1.1版本更新日志:
一、更新内容:通过处理异常情况解决了字符串报错问题,(定义函数strerror)(使用try语句)
二、问题点:输入和输出函数太过于简陋(print和input)——2022/5/17

2.0版本,tkinter的首次亮相:

为了调换掉print,我用了官方的info

但是效果不咋地,看着怪怪的,还有空白弹窗

计算器2.0版本更新日志:
一、更新内容:将print函数初步转化成弹窗(vkinter.messagebox.info)并且完善字符串与整数的拼接问题初步实现了弹窗输出
二、问题点:info函数弹窗太过简陋出现多余弹窗影响整体美观——2022/5/26

2.1版本,有些时候,简单更好:

如题,我换成了普通的label

调格式之后,发现更好了

计算器2.1版本更新日志:
一、更新内容:使用tk库内置函数(title、geometry、label、button)美化结构,并将标题内容也设为自定义添加“关闭窗口”按钮,并链接到exit函数,从而实现退出
二、问题点:当运算结果过大时,显示框无法显示全部内容需要添加横式滑动轴或换行机制和竖式滑动轴,以输出全部内容——2022/5/29

2.2版本,与挑剔滚动条的周旋:

有y说1,我一开始很想把滚动条加在label上

然而代价是我花了一个月,刷爆了全栈

都没有资料能告诉我咋办

发了篇博文也没有人理我

我的心情,除了无语还能咋办?

幸好我后来发现不能加,只能用text来

计算器2.2版本更新日志:
一、更新内容:当答案过大,显示不下时,或万不得已时使用text控件和srollbar控件实现无论多大的答案,都能实现的功能
二、问题点:在text控件中,字体太过简陋,也没有退出按钮需要进行美化——2022/6/24

2.3版本,遇见万能的font:

text控件,果然名副其实

真的只是个text啊!

(一点格式都没有)

后来我用了font,终于好一点了

计算器2.3版本更新日志:
一、更新内容:美化了text控件里的字体添加了按钮,实现关闭窗口同时完善了输出格式
二、问题点:输出函数已全部完成美化但输入函数(input)依旧简陋需要进行升级——2022/6/25

3.0版本,不肯漏出蛛丝马迹的entry:

接下来,该怼input了

本来用entry用的挺好的

数据都给get了

结果,运算结果没办法返回了!

button也是!

只能把这些函数都连在一起

计算器3.0版本更新日志:
一、更新内容:将input函数初步替换成entry函数并将label或text与entry进行连接,且进行美化方便用户使用
二、问题点:在选择性input上普通entry无法执行需要改进——2022/6/26

3.1版本(终极版本),官方之作未必最好:

最终,是我们的选择性input

想了半天,最终决定不用官方的单选框(别问我为什么)

不过效果还不错

顺便把函数们都连起来

只需一个函数就可以调用9个

计算器3.1版本更新日志:
一、更新内容:定义了decorator_radiobutton函数和additions_radiobutton函数分别控制用户是否想继续运算和选择哪个运算还将其美化并与entry联通实现了全部用tkinter库“函数化”“串联化”项目圆满结束!——2022/6/29

终极代码,效果:

来,逻辑图抛出来:

好了,放最终代码:

from tkinter import *
from tkinter import fontdef strerror(str):try:int(str)except ValueError:return '这不是整型'else:return '这是整型'def label(title, str):root = Tk()root.title(title)root.geometry('480x200')label = Label(root, text=str, font=("Arial Bold", 25))label.pack(side='top', expand='yes', fill='both')def exit():root.destroy()btn = Button(root, text='关闭窗口', bg='#C0C0C0', command=exit)btn.pack(side='top', fill='x', padx=5, pady=5)root.mainloop()
def text(title, str):root = Tk()root.title(title)root.geometry('480x200')root.font = font.Font(font=('Arial Bold', 20, font.BOLD))s2 = Scrollbar(root, orient=HORIZONTAL)s2.pack(side=BOTTOM, fill=X)textpad = Text(root, width=200, xscrollcommand=s2.set, wrap='none')textpad.pack(expand=YES, fill=BOTH)textpad.config(font=root.font)textpad.insert(INSERT, '答案过大,只能如此表示(最大化后会出现按钮)' + '\n')textpad.insert(INSERT, str)textpad.insert(INSERT, '                                                                               ')s2.config(command=textpad.xview)def exit():root.destroy()def button_1():def button_2():def button_3():def button_4():def button_5():def button_6():def button_7():btn_8 = Button(root, text='看右边(坏笑)')btn_8.pack()textpad.insert(INSERT, '你被耍了')btn_7 = Button(root, text='看来只有采取行动了!!!', command=button_7)btn_7.pack()btn_6 = Button(root, text='还执迷不悟?!', command=button_6)btn_6.pack()btn_5 = Button(root, text='你知道我为此敲了多少代码吗!', command=button_5)btn_5.pack()btn_4 = Button(root, text='你怎么这样呢', command=button_4)btn_4.pack()btn_3 = Button(root, text='点了你会后悔的', command=button_3)btn_3.pack()btn_2 = Button(root, text='真的别点', command=button_2)btn_2.pack()btn = Button(root, text='关闭窗口', bg='#C0C0C0', command=exit)btn.pack(side='top', fill='x', padx=5, pady=5)btn_1 = Button(root, text='千万别点我', command=button_1)btn_1.pack()root.mainloop()def entry_1():root = Tk()root.title('请输入数据')root.geometry('480x200')entry_1 = Entry(root, bd=5, font='华文行楷', width=40)entry_1.insert(0, '请输入加数(输入时请删去此内容)')entry_1.pack(padx=20, pady=5)entry_2 = Entry(root, bd=5, font='华文行楷', width=40)entry_2.insert(0, '请输入加数(输入时请删去此内容)')entry_2.pack(pady=20)def determine():entry_1_text = entry_1.get()entry_2_text = entry_2.get()if strerror(entry_1_text) == '这不是整型' or strerror(entry_2_text) == '这不是整型':label('提示', '这个数据不合理')else:entry = int(entry_1_text) + int(entry_2_text)if len(str(entry)) <= 19:label('结果', '答案是' + str(entry))else:text('结果', '答案是' + str(entry))def destory():root.destroy()button_determine = Button(root,  bd=5, text='确定计算', bg='#C0C0C0', padx=10, command=determine)button_determine.pack()button_destroy = Button(root,  bd=5, text='关闭窗口', bg='#C0C0C0', padx=10, command=destory)button_destroy.pack()root.mainloop()
def entry_2():root = Tk()root.title('请输入数据')root.geometry('480x200')entry_1 = Entry(root, bd=5, font='华文行楷', width=40)entry_1.insert(0, '请输入被减数(输入时请删去此内容)')entry_1.pack(padx=20, pady=5)entry_2 = Entry(root, bd=5, font='华文行楷', width=40)entry_2.insert(0, '请输入减数(输入时请删去此内容)')entry_2.pack(pady=20)def determine():entry_1_text = entry_1.get()entry_2_text = entry_2.get()if entry_1_text == '纸鸢1024' and entry_2_text == 'CSDN':def btn_1():def btn_2():def btn_3():text('纸鸢的CSDN', 'CSDN网址(别管上面):https://blog.csdn.net/m0_71220643?spm=1000.2115.3001.5343')button_3 = Button(root, text='好吧,看就看吧……我也想涨点粉了(必须关注哦!!!)', command=btn_3)button_3.pack()button_2 = Button(root, text='这里不允许你进入', command=btn_2)button_2.pack()button_1 = Button(root, text='你想干什么!(最大化看我)', command=btn_1)button_1.pack()elif strerror(entry_2_text) == '这不是整型' or strerror(entry_1_text) == '这不是整型':label('提示', '这个数据不合理')else:entry = int(entry_1_text) - int(entry_2_text)if len(str(entry)) <= 19:label('结果', '答案是' + str(entry))else:text('结果', '答案是' + str(entry))def destory():root.destroy()button_determine = Button(root,  bd=5, text='确定计算', bg='#C0C0C0', padx=10, command=determine)button_determine.pack()button_destroy = Button(root,  bd=5, text='关闭窗口', bg='#C0C0C0', padx=10, command=destory)button_destroy.pack()root.mainloop()
def entry_3():root = Tk()root.title('请输入数据')root.geometry('480x200')entry_1 = Entry(root, bd=5, font='华文行楷', width=40)entry_1.insert(0, '请输入因数(输入时请删去此内容)')entry_1.pack(padx=20, pady=5)entry_2 = Entry(root, bd=5, font='华文行楷', width=40)entry_2.insert(0, '请输入因数(输入时请删去此内容)')entry_2.pack(pady=20)def determine():entry_1_text = entry_1.get()entry_2_text = entry_2.get()if strerror(entry_1_text) == '这不是整型' or strerror(entry_2_text) == '这不是整型':label('提示', '这个数据不合理')else:entry = int(entry_1_text) * int(entry_2_text)if len(str(entry)) <= 19:label('结果', '答案是' + str(entry))else:text('结果', '答案是' + str(entry))def destory():root.destroy()button_determine = Button(root,  bd=5, text='确定计算', bg='#C0C0C0', padx=10, command=determine)button_determine.pack()button_destroy = Button(root,  bd=5, text='关闭窗口', bg='#C0C0C0', padx=10, command=destory)button_destroy.pack()root.mainloop()
def entry_4():root = Tk()root.title('请输入数据')root.geometry('480x200')entry_1 = Entry(root, bd=5, font='华文行楷', width=40)entry_1.insert(0, '请输入被除数(输入时请删去此内容)')entry_1.pack(padx=20, pady=5)entry_2 = Entry(root, bd=5, font='华文行楷', width=40)entry_2.insert(0, '请输入除数(输入时请删去此内容)')entry_2.pack(pady=20)def determine():entry_1_text = entry_1.get()entry_2_text = entry_2.get()if strerror(entry_1_text) == '这不是整型' or strerror(entry_2_text) == '这不是整型':label('提示', '这个数据不合理')elif entry_2_text == '0':label('提示', '除数不能是0')else:entry = int(entry_1_text) / int(entry_2_text)if len(str(entry)) <= 19:label('结果', '答案是' + str(entry))else:text('结果', '答案是' + str(entry))def destory():root.destroy()button_determine = Button(root,  bd=5, text='确定计算', bg='#C0C0C0', padx=10, command=determine)button_determine.pack()button_destroy = Button(root,  bd=5, text='关闭窗口', bg='#C0C0C0', padx=10, command=destory)button_destroy.pack()root.mainloop()def additions_radiobutton():root = Tk()root.title('选择')label = Label(root, text='请选择要哪种运算', font=('华文行楷', 15))root.geometry('480x200')label.pack()def additions_1():entry_1()def additions_2():entry_2()def additions_3():entry_3()def additions_4():entry_4()def close():root.destroy()button_1 = Button(root, bd=5, text='加法', bg='#C0C0C0', padx=10, command=additions_1)button_2 = Button(root, bd=5, text='减法', bg='#C0C0C0', padx=10, command=additions_2)button_3 = Button(root, bd=5, text='乘法', bg='#C0C0C0', padx=10, command=additions_3)button_4 = Button(root, bd=5, text='除法', bg='#C0C0C0', padx=10, command=additions_4)button_5 = Button(root, bd=5, text='关闭', bg='#C0C0C0', padx=10, command=close)button_1.pack()button_2.pack()button_3.pack()button_4.pack()button_5.pack()root.mainloop()
def decorator_radiobutton():root = Tk()root.title('选择')label = Label(root, text='请选择是否要开始运算', font=('华文行楷', 15))root.geometry('480x200')label.pack()def get():additions_radiobutton()button_1 = Button(root, bd=5, text='是,开始计算', bg='#C0C0C0', padx=10, command=get)def close():root.destroy()button_2 = Button(root, bd=5, text='否,停止计算', bg='#C0C0C0', padx=10, command=close)button_1.pack()button_2.pack()root.mainloop()decorator_radiobutton()

放运行视频(剪辑过的):

计算器使用视频

运行过程中,把text文本框放大

或减法输入“纸鸢1024”与“CSDN”

小惊喜等着你哦~

(相信大家已经看出来那两个彩蛋了吧)

上述代码如有任何bug,错误,异常(彩蛋除外),评论区尽管说!

好了,庆祝一下,这篇文章就结束了,知道这个项目微不足道,但我希望和平相处,拜了个拜!

python tkinter 自主小项目——计算器往事相关推荐

  1. python有趣的小项目-10 个最值得 Python 新人练手的有趣项目

    原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...

  2. Python练手小项目

    一.画爱心表白 1.图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range: ...

  3. 100个python进阶实战小项目(适合新手) 微信撤回查看|抖音批量下载等

    Hi~,各位小伙伴,Python是目前编程语言中的主流语言之一,也是公认最容易入门的编程语言,因为Python语言近几年的火爆,有很多小伙伴都开始学习这门语言. 编程语言学习,最重要的是"多 ...

  4. 徒弟做了一个Python的实战小项目——银行系统

    国际惯例:实践是检验真理的唯一标准. 众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石.下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办业务时候会有个自助的A ...

  5. python+tkinter仿制win10标准型计算器(中文版)完美教学

    前言 马上就要实习了,而我却没有拿得出手的项目..哎实力不够啊.还有六个月时间,先从简单开始吧,一步一个脚印,大家一起加油! "设计很难,模仿不易."这是我创作计算器时内心的独白. ...

  6. python有趣的小项目-有趣的十个Python实战项目,让你瞬间爱上Python!

    前言 Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣.Pytho ...

  7. python有趣的小项目-这10个Python项目超有趣!

    前言: Python可谓是现在很多人正在学或者想学的一个脚本语言了,提到学习自然就少不了拿项目练手,可是一般的项目根本提不起兴趣嘛,这10个项目可是非常有趣的,不信你看看. 用 50 行 Python ...

  8. python简单代码加法-Python tkinter实现简单加法计算器代码实例

    tkinter 是 Python 的标准 GUI 库.Python 使用 tkinter 可以快速的创建 GUI 应用程序.由于 tkinter 是内置到 python 的安装包中.只要安装好 Pyt ...

  9. python初学者入门小项目之一:在 cowpy中增加自己的人物头像

    各位有志学习python的小伙伴们好~这次我们一起来做一个很小很小的项目,用来作为python刚开始的第一步. 首先介绍下我用的环境,Windows XP + Python3.4.配置比较老了. 我们 ...

  10. python词频统计小项目

    目录 1.项目简介: 2.代码如下: 1.countwords.py 2.UIjiemian.py 3.运行结果,界面显示:​编辑 4.柱状图显示 1.项目简介: 编写程序统计QQ导出的聊天记录,对发 ...

最新文章

  1. R语言诊断试验数据处理与ROC分析实战案例1
  2. 安全事件日志中的登录事件
  3. 树莓派上搭建svn服务器
  4. oracle在数据表中获取年月日时分秒
  5. Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
  6. hybris impex里忽略某列数据的语法
  7. 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识
  8. uva 10692——Huge Mods
  9. 决策树系列(二)——剪枝
  10. 计算机加入域后的用户名和密码,Windows自动改计算机名和加入域工具
  11. 机器学习项目实战(七) 机器学习预测股价
  12. 苹果退款_苹果App Store竟然还可以退款?App Store退款教程
  13. js写的中文数字转换成数字的一个小小的算法
  14. 卡诺图和Apple Watch的第一次亲密接触
  15. CVPR 2021 自动驾驶相关论文解读
  16. 提问的艺术:如何通过提示词让 ChatGPT 更准确地理解你的问题?
  17. electron-builder+electron-updater实现应用自动更新过程
  18. linux内核打印前有buildroot,[教程]使用buildroot完全自定义自己的embedded linux系统(nand)...
  19. 计算机,编码,文本阅读器 二
  20. 作为一名程序员,聊聊我们的现状和未来

热门文章

  1. Android快捷开关实现
  2. 产品需求文档到底该怎么写?
  3. 线性代数学习笔记——第五十七讲——特征子空间
  4. c语言数组文曲星猜数游戏编程,第7章 数组-8数组的其他应用——文曲星猜数游戏...
  5. 从一坨「便便」说起,大V亲测iPhone X为什么这么贵!
  6. 模电(八)放大电路静态工作点的稳定性
  7. java P1195 口袋的天空
  8. linux秘钥登录使用authorized_keys不生效
  9. TLC5615 10位DA模块数模转换芯片驱动
  10. Fantastic Blog CMS SQL注入漏洞(CVE-2022-28512)