基于Python的tkinter库用100行代码制作多功能计算器 您所在的位置:网站首页 多功能计算器的功能 基于Python的tkinter库用100行代码制作多功能计算器

基于Python的tkinter库用100行代码制作多功能计算器

2024-07-10 09:00| 来源: 网络整理| 查看: 265

目录

作业基本信息

PSP表格

 解题思路描述

问题一  可视化界面设计(接口实现过程)

问题二  内在逻辑设计(接口实现过程)

程序的异常处理与亮点

单元测试

心得体会

作业基本信息 这个作业属于哪个课程2301-计算机学院-软件工程这个作业要求在哪里软件工程实践第一次作业这个作业的目标完成一个具有可视化界面的计算器。Gitcode项目地址软工第一次作业其他参考文献单元测试和回归测试 PSP表格 PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划1515• Estimate• 估计这个任务需要多少时间13701465Development开发150250• Analysis• 需求分析 (包括学习新技术)9090• Design Spec• 生成设计文档1515• Design Review• 设计复审1515• Coding Standard• 代码规范 (为目前的开发制定合适的规范)2025• Design• 具体设计100130• Coding• 具体编码200160• Code Review• 代码复审200170• Test• 测试(自我测试,修改代码,提交修改)150150Reporting报告150180• Test Repor• 测试报告200200• Size Measurement• 计算工作量5050• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1515合计13701465 功能实现

1.基础计算功能

加减乘除,清除,退格

2.特殊附加功能

弧度角度转换

三角函数

反三角函数

幂运算,开根号

阶乘

 解题思路描述

        相比于HTML、CSS,我本次更倾向于使用Python语言完成此次任务,首先是对于Python比较熟悉,其次是Python提供的tkinter库功能强大,基本能够满足计算器可视化界面的功能要求,并且代码量并不大。思路包括以下几个关键步骤:

创建GUI界面:首先,使用tkinter库创建计算器的用户界面。通过创建窗口、输入框和各种按钮,来构建用户界面。 设计按钮和功能:决定计算器界面上需要哪些按钮,以及每个按钮的功能。这些按钮包括数字、基本运算符(加、减、乘、除)、特殊运算符(开根号、对数、幂运算)、三角函数、反三角函数、等号、清除按钮等。按钮点击事件:为每个按钮定义点击事件处理函数。这些处理函数将根据按钮的不同执行不同的操作,如添加数字到输入框、执行计算、清除输入等。计算逻辑:实现计算逻辑,包括解析用户输入的表达式、进行数学计算,并将结果显示在输入框中。本次作业使用Python的内置eval()函数来执行基本的数学运算,极大减少了代码量。错误处理:添加错误处理机制,以处理用户可能输入的无效表达式或错误操作。使用try-except语句来捕获异常并显示错误消息。美化界面:美化计算器界面,设置按钮颜色、字体样式、窗口大小等,以提高用户体验。测试和调试:在编写完代码后,进行测试和调试,确保计算器的各个功能正常工作。 问题一  可视化界面设计(接口实现过程)

如何设计可视化界面?

创建主窗口:使用tkinter库创建一个主窗口,设置窗口的标题和大小。

输入框设计:在主窗口中创建一个输入框,用于显示用户输入的表达式和计算结果。设置输入框的样式、宽度和位置。

root = tk.Tk() root.title("non的计算器") # 设置背景颜色和字体 root.geometry('500x380+100+100') root.configure(bg='#f0f0f0') font_style = ("Helvetica", 20) result_var = tk.StringVar() result_var.set('') entry = tk.Entry(root, width=30, font=font_style, bd=10) entry.grid(row=0, column=0, columnspan=7, padx=10, pady=20)

按钮设计:设计各种按钮,包括数字按钮、运算符按钮、功能按钮(如等号、清除按钮)以及特殊功能按钮(如三角函数、对数、开根号、幂运算等)。按钮可以用tk.Button创建,设置按钮的文本、样式和点击事件。

布局管理:使用布局管理器(如grid、pack、place)来安排输入框和按钮的位置和大小。通常,数字按钮和运算符按钮可以使用网格布局排列,使界面整齐。设置按钮的颜色、字体样式、边框宽度等,以提高界面的可视吸引力。你可以使用font、bg、fg等选项来自定义按钮的样式。

#其余功能按钮 button_plus = tk.Button(root, text="+", command=lambda: click_button('+'), **button_style, bg='#ee82ee') button_minus = tk.Button(root, text="-", command=lambda: click_button('-'), **button_style, bg='#ee82ee') button_multiply = tk.Button(root, text="*", command=lambda: click_button('*'), **button_style, bg='#ee82ee') button_divide = tk.Button(root, text="/", command=lambda: click_button('/'), **button_style, bg='#ee82ee') button_dot = tk.Button(root, text=".", command=lambda: click_button('.'), **button_style, bg='#6495ed') button_clear = tk.Button(root, text="AC", command=clear_entry, **button_style, bg='#6495ed') button_equals = tk.Button(root, text="=", command=equals, **button_double_style, bg='#6495ed') button_sqrt = tk.Button(root, text="√", command=lambda: click_button('math.sqrt('), **button_style, bg='#e6e6fa') button_delete = tk.Button(root, text="DEL", command=delete_last_char, **button_style, bg='#6495ed') button_open_parenthesis = tk.Button(root, text="(", command=lambda: click_button('('), **button_style, bg='#6495ed') button_close_parenthesis = tk.Button(root, text=")", command=lambda: click_button(')'), **button_style, bg='#6495ed') button_sin = tk.Button(root, text="sin", command=lambda: click_button('math.sin('), **button_style, bg='#e6e6fa') button_cos = tk.Button(root, text="cos", command=lambda: click_button('math.cos('), **button_style, bg='#e6e6fa') button_tan = tk.Button(root, text="tan", command=lambda: click_button('math.tan('), **button_style, bg='#e6e6fa') button_pi = tk.Button(root, text="π", command=lambda: click_button('3.141592653589'), **button_style, bg='#6495ed') button_factorial = tk.Button(root, text="!", command=lambda: click_button('math.factorial('), **button_style, bg='#e6e6fa') button_e = tk.Button(root, text="e", command=lambda: click_button('2.718281828459'), **button_style, bg='#6495ed')

按钮事件绑定:为每个按钮绑定相应的点击事件处理函数。这些事件处理函数将在用户点击按钮时执行相应的操作,例如将按钮文本添加到输入框、执行计算、清除输入等。

lambda可以使我们在任何地方创建一个没有名字的单行函数。这个东西能在GUI里面帮到我们很大的忙,使我们的函数控制器能传递参数。

问题二  内在逻辑设计(接口实现过程)

如何设计内在逻辑?

按钮点击事件处理:为不同类型的按钮(数字、运算符、功能)分别编写事件处理函数。在这些函数中,根据按钮类型执行相应的操作。例如,数字按钮应将数字添加到输入框,运算符按钮应处理运算符的输入,功能按钮应执行特定的数学功能。

计算逻辑:设计计算逻辑,用于解析用户输入的表达式并执行数学运算。你可以使用Python的eval()函数来执行基本的数学运算,但要小心处理错误情况,例如用户输入无效表达式的情况。

#使用equal函数 def equals(): entry.delete(0, tk.END) opt = result_var.get() try: result = eval(opt) result_var.set(str(result)) except: result = "ERROR" result_var.set(str(result)) entry.insert(tk.END, str(result))

错误处理:在计算逻辑中添加错误处理机制,以处理可能的异常情况。例如,如果用户输入无效表达式,可以弹出错误消息框。

特殊功能实现:对于包含三角函数、对数、幂运算、开根号等特殊功能,需要编写相应的数学函数或调用Python的数学库来实现这些功能。

结果显示:将计算结果显示在输入框中,以便用户查看。结果应在计算完成后更新。

清除功能:实现清除按钮的功能,允许用户清除输入框的内容。

#清除输入栏 def clear_entry(): result_var.set('') entry.delete(0, tk.END) #清除输入的最后一个字符 def delete_last_char(): current_text = entry.get() if current_text: new_text = current_text[:-1] entry.delete(0, tk.END) entry.insert(tk.END, new_text)

关键代码已在上面展示,不再赘述,详情可见Gitcode。

程序的异常处理与亮点

        使用try-except语句来捕获异常并显示错误消息。其错误信息包含多种情况:除数为0、左右括号不匹配等等,对不符合规范的计算表达式进行检查,提高了程序的性能。

try ... except ...

        程序的亮点在于对计算器的多功能基本达到,附加功能齐全,在实现加、减、乘、除、归零基本操作的基础上,进一步实现次方、幂、三角函数等操作,是具有科学计算的计算器。且可视化界面对用户十分友好,按键布局、质感较好,很符合一个计算器的形象。

单元测试

利用unittest 库进行单元测试,通常用 assertEqual()等 assert 断言语句进行验证。

测试代码如下:

class Test(unittest.TestCase): def test_one(self): result_var.set('3+4-7+8*9-6/3') equals() self.assertEqual(result_var, '70') def test_two(self): result_var.set('math.sin(pi)') equals() self.assertEqual(result_var, '0') def test_three(self): result_var.set('pow(2,10)') equals() self.assertEqual(result_var, '1024') def test_multiplication(self): result_var.set('math.sqrt(2*2)') equals() self.assertEqual(result_var, '2.0') if __name__ == '__main__': unittest.main()

分四个测试点进行测试,得到如下测试结果:

心得体会

        这次我是第一次接触到开发这种具有可视化界面的程序软件,收获很多。开发的方式有很多种,开发语言也不尽相同,因此要在开始着手之前计划好使用哪种方案和开发软件。在开始编写代码之前,确保你对计算器的需求有清晰明确的了解。不同的计算器可能有不同的功能,所以要确保你知道你要开发的计算器需要支持哪些操作。计算器通常涉及到数学运算,因此可以利用Python的数学库(如math模块)来简化数学计算的实现。最好使用手头可以直接用的,比较好上手的库函数或者软件,可以减少代码量,提高程序效率。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有