project1_calculator(使用tkinter实现python计算器,含有具体过程与注释)
最终的运行效果图(程序见序号7):
- #!/usr/bin/env python
# -*- coding:utf-8 -*-
# ------------------------------------------------------------
#
# 参考资料:
# tkinter事件之bind - 鹄望 - 博客园
# https://www.cnblogs.com/huwang-sun/p/7064048.html
#
# Python 3 Tkinter教程之事件Event绑定处理代码实例_python_编程语言_169IT.COM
# http://www.169it.com/article/11243858854023511493.html
#
# python Tkinter之Button - 一杯明月 - 博客园
# https://www.cnblogs.com/yibeimingyue/p/9395219.html
#
#
# 80行代码使用Python+tkinter实现一个计算器 - CSDN博客
# https://blog.csdn.net/oh5W6HinUg43JvRhhB/article/details/78804200
#
# python 3.+版 计算器 - CSDN博客
# https://blog.csdn.net/xueshao110/article/details/78973416
#
# Python(16)python使用tkinter实现一个简单的计算器 - CSDN博客
# https://blog.csdn.net/wizblack/article/details/78932258
#
# ------------------------------------------------------------
# ******************** project1_calculator *******************
# ******************** project1_calculator *******************
# =====>>>>>>内容概览
# =====>>>>>>内容概览- '''
- # ------------------------------------------------------------
# # 1、窗口以及相关的菜单栏
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 2、建立按钮
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 3、设置显示框, 将输入绑定到显示框
# # # 增加位置: def __init__(self):; def click_button(self, event):
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 4、实现基本的计算器功能
# # # 改动位置位置: def click_button(self, event):
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 5、实现基本的计算器功能,补充错误检测
# # # 改动位置位置: def click_button(self, event):
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 6、实现基本的计算器功能,补充错误检测,补充‘C’后退输入功能
# # # 改动位置位置: def click_button(self, event):
# ------------------------------------------------------------- # ------------------------------------------------------------
# # 7、(完成全部设计)实现基本的计算器功能,补充错误检测, 修改‘C’为清楚功能, '<=='为后退功能
# # # 改动位置位置: def click_button(self, event):
# ------------------------------------------------------------- '''
- # ------------------------------------------------分割线-------------------------------------------------
# ------------------------------------------------分割线-------------------------------------------------
# ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 1、窗口以及相关的菜单栏
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240,325)
- self.window.maxsize(240, 325)
- # 设置菜单
- self.set_menu()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:许建JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- start = Calculator()
运行效果图1:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 2、建立按钮
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240,325)
- self.window.maxsize(240, 325)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='C', bd=2, font='黑体')
- btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
- start = Calculator()
运行效果图2:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 3、设置显示框, 将输入绑定到显示框
- # # # 增加位置: def __init__(self):; def click_button(self, event):
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240, 290)
- self.window.maxsize(240, 290)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置显示框
- self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
- self.label_show.place(x=0, y=0, width=240,height=80)
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='C', bd=2, font='黑体')
- btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
- # 绑定Button的点击事件
- btn7.bind_class('Button', '<Button-1>', self.click_button)
- def click_button(self, event):
- # 输入的按键信息
- input_event = event.widget['text']
- # 输入的按键信息显示
- self.label_show['text'] = self.label_show['text'] + input_event
- start = Calculator()
运行效果图3:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 4、实现基本的计算器功能
- # # # 改动位置位置: def click_button(self, event):
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240, 290)
- self.window.maxsize(240, 290)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置显示框
- self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
- self.label_show.place(x=0, y=0, width=240,height=80)
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='C', bd=2, font='黑体')
- btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
- # 绑定Button的点击事件
- btn7.bind_class('Button', '<Button-1>', self.click_button)
- def click_button(self, event):
- # 输入的按键信息
- input_event = event.widget['text']
- # 输入的按键信息显示
- self.label_show['text'] = self.label_show['text'] + input_event
- # 进行普通计算
- if event.widget['text'] == '=':
- res_bit = 2 # 计算保留的位数
- res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
- # print(type(res))
- self.label_show['text'] = str(round(float(res), res_bit ))
- start = Calculator()
运行效果图4:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 5、实现基本的计算器功能,补充错误检测
- # # # 改动位置位置: def click_button(self, event):
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240, 290)
- self.window.maxsize(240, 290)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置显示框
- self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
- self.label_show.place(x=0, y=0, width=240,height=80)
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='C', bd=2, font='黑体')
- btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
- # 绑定Button的点击事件
- btn7.bind_class('Button', '<Button-1>', self.click_button)
- def click_button(self, event):
- # 输入的按键信息
- input_event = event.widget['text']
- # 输入的按键信息显示
- self.label_show['text'] = self.label_show['text'] + input_event
- # 进行普通计算
- if event.widget['text'] == '=':
- try:
- res_bit = 2 # 计算保留的位数
- res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
- # print(type(res))
- self.label_show['text'] = str(round(float(res), res_bit))
- except ZeroDivisionError:
- # 除法时,除数不能为0
- self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
- except:
- self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
- start = Calculator()
运行效果图5:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 6、实现基本的计算器功能,补充错误检测,补充‘C’后退输入功能
- # # # 改动位置位置: def click_button(self, event):
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240, 290)
- self.window.maxsize(240, 290)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置显示框
- self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
- self.label_show.place(x=0, y=0, width=240,height=80)
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='C', bd=2, font='黑体')
- btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
- # 绑定Button的点击事件
- btn7.bind_class('Button', '<Button-1>', self.click_button)
- def click_button(self, event):
- # 输入的按键信息
- input_event = event.widget['text']
- # 输入的按键信息显示
- self.label_show['text'] = self.label_show['text'] + input_event
- # 进行普通计算
- if event.widget['text'] == '=':
- try:
- res_bit = 2 # 计算保留的位数
- res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
- # print(type(res))
- self.label_show['text'] = str(round(float(res), res_bit))
- except ZeroDivisionError:
- # 除法时,除数不能为0
- self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
- except:
- self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
- elif event.widget['text'] == 'C':
- back_res = self.label_show['text'][:-2] # 点击的‘C’也计算在内,因此是倒数2位去掉
- self.label_show['text'] = back_res
- start = Calculator()
运行效果图6:
- # ------------------------------------------------分割线-------------------------------------------------
- '''
- # ------------------------------------------------------------
- # # 7、(完成全部设计)实现基本的计算器功能,补充错误检测, 修改‘C’为清楚功能, '<=='为后退功能
- # # # 改动位置位置: def click_button(self, event):
- # ------------------------------------------------------------
- '''
- class Calculator:
- import tkinter as tk
- import tkinter.messagebox as mbox
- def __init__(self):
- # 生成一个窗口对象
- self.window = self.tk.Tk()
- # 命名窗口对象的显示title
- self.window.title('计算器')
- # 设置窗口的大小 minsize最小 maxsize最大
- self.window.minsize(240, 290)
- self.window.maxsize(240, 290)
- # 是否清空显示框判定参数
- # ????
- # 设置菜单
- self.set_menu()
- # 设置显示框
- self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
- self.label_show.place(x=0, y=0, width=240,height=80)
- # 设置按钮组件
- self.set_buttons()
- # 将窗口放入主消息队列
- self.window.mainloop()
- def set_menu(self):
- '''
- 设置菜单
- :return: None
- '''
- # 创建总菜单
- menubar = self.tk.Menu(self.window)
- # 创建一个下拉菜单,并且加入文件菜单
- filemenu = self.tk.Menu(menubar, tearoff=False)
- # 创建菜单中的选项
- filemenu.add_command(label='退出计算器', command=self.window.quit )
- # print author的函数
- def show_author():
- self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
- filemenu.add_command(label='作者信息', command=show_author)
- # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
- menubar.add_cascade(label='查看', menu=filemenu)
- # 显示总菜单
- self.window.config(menu=menubar)
- def set_buttons(self):
- # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
- x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
- # 7
- btn7 = self.tk.Button(text='7', bd=2, font='黑体')
- btn7.place( x=x0, y=y0, width=x_width, height=y_width)
- # 8
- btn8 = self.tk.Button(text='8', bd=2, font='黑体')
- btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
- # 9
- btn9 = self.tk.Button(text='9', bd=2, font='黑体')
- btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
- # +
- btn_add = self.tk.Button(text='+', bd=2, font='黑体')
- btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
- # 4
- btn4 = self.tk.Button(text='4', bd=2, font='黑体')
- btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
- # 5
- btn5 = self.tk.Button(text='5', bd=2, font='黑体')
- btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
- # 6
- btn6 = self.tk.Button(text='6', bd=2, font='黑体')
- btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
- # -
- btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
- btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
- # 1
- btn1 = self.tk.Button(text='1', bd=2, font='黑体')
- btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
- # 2
- btn2 = self.tk.Button(text='2', bd=2, font='黑体')
- btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
- # 3
- btn3 = self.tk.Button(text='3', bd=2, font='黑体')
- btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
- # *
- btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
- btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
- # 0
- btn0 = self.tk.Button(text='0', bd=2, font='黑体')
- btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
- # .
- btn_point = self.tk.Button(text='.', bd=2, font='黑体')
- btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
- # /
- btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
- btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
- # C后退
- btn_clear = self.tk.Button( text='C', bd=2, font='黑体')
- btn_clear.place( x=x0, y=y0+y_width*4, width=x_width, height=y_width)
- # C后退
- btn_back = self.tk.Button( text='<==', bd=2, font='黑体')
- btn_back.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width, height=y_width)
- # =
- btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
- btn_equal.place( x=x0+x_width*2, y=y0+y_width*4, width=x_width*2, height=y_width)
- # 绑定Button的点击事件
- btn7.bind_class('Button', '<Button-1>', self.click_button)
- def click_button(self, event):
- # 获取点击的按钮信息信息
- input_event = event.widget['text']
- # 输入的按钮信息显示
- self.label_show['text'] = self.label_show['text'] + input_event
- # 异常捕获
- try:
- # 计算符号
- cal_symbol = ['+', '-', '*', '/']
- # 判定运算符号重复的时候,使用最后输入的符号
- if self.label_show['text'][-1] in cal_symbol and self.label_show['text'][-2] in cal_symbol:
- # 取重复符号前面的内容
- header = self.label_show['text'][:-2]
- footer = self.label_show['text'][-1]
- self.label_show['text'] = header + footer
- except:
- pass
- # 进行普通计算
- if event.widget['text'] == '=':
- # 异常捕获
- try:
- res_bit = 2 # 计算保留的位数
- res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
- # print(type(res))
- self.label_show['text'] = str(round(float(res), res_bit))
- except ZeroDivisionError:
- # 除法时,除数不能为0
- self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
- except:
- self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
- elif event.widget['text'] == '<==':
- # 点击的‘<==’也计算在内,它占3个字符,因此是倒数4位去掉
- back_res = self.label_show['text'][:-4]
- self.label_show['text'] = back_res
- elif event.widget['text'] == 'C':
- # 点击的‘C’也计算在内,因此是倒数2位去掉
- self.label_show['text'] = ''
- start = Calculator()
运行效果图7(最终的运行效果):
project1_calculator(使用tkinter实现python计算器,含有具体过程与注释)的更多相关文章
- 作业1开发一个简单的python计算器
开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...
- python 计算器的(正则匹配+递归)
经过2天的长时间的战斗,python计算器终于完成了. import re val="1-2*((60-30*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3 ...
- Python计算器实操
要求: 开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...
- 7_python之路之python计算器
7_python之路之python计算器 1.程序说明:Readme.cmd 1.程序文件及说明: calculator.py 2.python版本:python-3.5.3 3.程序使用:pytho ...
- 老男孩python作业5-开发一个简单的python计算器
开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...
- Python程序的执行过程原理(解释型语言和编译型语言)
Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...
- Python程序的执行过程 解释型语言和编译型语言
转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...
- 说说Python程序的执行过程
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...
- 转载 - Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)
出处:http://www.cnblogs.com/ifantastic/p/3185665.html Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LT ...
随机推荐
- Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用
一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境 2> 练习命令历史.命令别名 3 ...
- java url中文参数乱码
String city=new String(city_name.getBytes("ISO-8859-1"), "UTF-8");
- Jmeter json和正在提取及断言
Jmeter json和正在提取及断言 一.提取所需要断言的内容: 响应数据如下:加入需要提取userid为10477的值 { "pub": { , ", " ...
- spark hive java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT
java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT 这个问题我感觉是hive给spark挖的一个大坑.spark版本是2.4.4,hive是3 这个 ...
- 3、Cookie与Session之间有哪些区别或者是优缺点?
Cookie与Session之间有哪些区别或者是优缺点? 知道了Cookie与Session,我们来做一些简单的总结: 1.Cookie可以存储在浏览器或者本地,session只能存在服务器 ...
- JVM简介及类加载机制(一)
JVM介绍: 目标:JVM运行字节码文件,根据JVM的日志调节程序,对于底层原理有一定的了解 1. 类加载 在JAVA代码中,类型的加载,连接与初始化都是在程序运行期间完成的,提供了灵活性增加了更多的 ...
- 1060 Are They Equal (25 分)
1060 Are They Equal (25 分) If a machine can save only 3 significant digits, the float numbers 1230 ...
- POJ 1673 EXOCENTER OF A TRIANGLE(解三角形重心)
题目链接:http://poj.org/problem?id=1673 AC代码: #include<cstdio> #include<cmath> #include<a ...
- Comet OJ - Contest #4 B题 奇偶性
题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...
- C# 十六进制转换ASCII
string s = "这里放十六进制字符串"; byte[]buff=new byte[s.Length/2]; int ind ...