Python实现电子计算器

您所在的位置:网站首页 用python做科学计算器界面源码 Python实现电子计算器

Python实现电子计算器

2024-07-12 11:26| 来源: 网络整理| 查看: 265

一、实验目的

学习使用Python的Tkinter库进行图形界面编程,实现一个具有弹窗界面的电子计算器,完成基本的加、减、乘、除运算。

二、实验原理

Tkinter是Python的标准GUI(图形用户界面)库,用于创建窗口、标签、按钮等图形界面元素。通过编写Python代码,使用Tkinter库创建计算器的图形界面,并定义各个按钮的功能。使用事件处理机制,响应用户的输入和按钮点击事件,完成相应的数学运算。

三、实验条件(设备与软件等)

Python环境:Python3.11.2版本

开发工具:PyCharm

四、实验步骤

1.导入Tkinter库,创建主窗口。

2.定义计算器的各种按钮,并设置其位置和字体。

3.使用事件处理函数,定义每个按钮的功能。

4.运行主循环,显示计算器的图形界面,等待用户操作。

五、实验结果

成功实现了一个具有图形界面的电子计算器,能够完成基本的加、减、乘、除运算。计算器界面美观,按钮布局合理,操作简便。计算结果准确,程序运行稳定。

六、实验分析

通过本实验,掌握了Tkinter库的基本使用方法,学会了如何创建图形界面程序。学会了使用事件处理机制,实现用户与程序之间的交互。培养了分析和解决问题的能力,提高了编程实践能力。

七、思考与总结

通过本次实验,学会了使用Python的Tkinter库实现一个具有图形界面的电子计算器,掌握了基本的图形界面编程技巧,提高了编程实践能力。在今后的学习中,将继续深入学习Python编程,探索更多实际应用。

八、代码

from tkinter import * # from tkinter.ttk import * def frame(master): """将共同的属性作为默认值, 以简化Frame创建过程""" w = Frame(master) w.pack(side=TOP, expand=YES, fill=BOTH) return w def btn(master, text, command): """提取共同的属性作为默认值, 使Button创建过程简化""" w = Button(master, text=text, command=command, width=6) w.pack(side=LEFT, expand=YES, fill=BOTH, padx=2, pady=2) return w def calc(text_data): """用eval方法计算表达式字符串""" try: if (separator_flag.get() == 0): return eval(del_separator(text_data)) else: return add_separator(str(eval(del_separator(text_data)))) except (SyntaxError, ZeroDivisionError, NameError): return 'Error' def back(text_data): """将text_data最末的字符删除并返回""" if len(text_data) > 0: return text_data[:-1] else: return text_data def add_separator(text_data): """向参数传入的数字串中添加千位分隔符 这里考虑了三种情况: 无整数部份, 无小数部份, 同时有整数和小数部份 由于字符串是不可改变的, 这里由字符串生成列表以便执行insert操作和 extend操作, 操作完成后最由列表生成字符串返回 """ dot_index = text_data.find('.') if dot_index > 0: text_head = text[:dot_index] text_tail = text[dot_index:] elif dot_index < 0: text_head = text_data text_tail = '' else: text_head = '' text_tail = text_data list_ = [char for char in text_head] length = len(list_) tmp_index = 3 while length - tmp_index > 0: list_.insert(length - tmp_index, ',') tmp_index += 3 list_.extend(text_tail) new_text = '' for char in list_: new_text += char return new_text def del_separator(text_data): """删除数字串中所有的千位分隔符""" return text_data.replace(',', '') # 开始界面的实现 init_root = Tk() init_root.resizable(width=False, height=False) init_root.title("计算器") # 添加标题 main_menus = Menu() # 创建最上层主菜单 # 创建计算器菜单, 并加入到主菜单 calc_menu = Menu(main_menus, tearoff=0) calc_menu.add_command(label='退出', command=lambda: exit()) main_menus.add_cascade(label='菜单', menu=calc_menu) text = StringVar() separator_flag = IntVar() separator_flag.set(0) view_menu = Menu(main_menus, tearoff=0) init_root['menu'] = main_menus # 将主菜单与root绑定 # 创建文本框 Entry(init_root, textvariable=text).pack(expand=YES, fill=BOTH, padx=2, pady=4) # style = Style() # style.configure('TButton', padding=3) # 创建第一行三个按钮 first_line = frame(init_root) btn(first_line, '回退', lambda t=text: t.set(back(t.get()))) btn(first_line, '清空', lambda t=text: t.set('')) # 每行四个, 创建其余四行按钮 for key in ('789/', '456*', '123-', '0.=+'): others = frame(init_root) for char in key: if char == '=': btn(others, char, lambda data=text: data.set(calc(data.get()))) else: btn(others, char, lambda data=text, c=char: data.set(data.get() + c)) if __name__ == '__main__': init_root.mainloop()

九、预期结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3