project1_calculator(使用tkinter实现python计算器,含有具体过程与注释)

35 篇文章 0 订阅
17 篇文章 0 订阅

最终的运行效果图(程序见序号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联系邮箱:******tprint@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(最终的运行效果): 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于Tkinter计算器实现示例: ```python import tkinter as tk class Calculator: def __init__(self): self.root = tk.Tk() self.root.title("Calculator") # 创建显示面板 self.display = tk.Entry(self.root, width=20, font=('Arial', 16)) self.display.grid(row=0, column=0, columnspan=4, pady=10) # 添加按钮 # 第一行 btn_clear = tk.Button(self.root, text='C', width=5, height=2, command=self.clear) btn_clear.grid(row=1, column=0) btn_divide = tk.Button(self.root, text='/', width=5, height=2, command=lambda: self.button_click('/')) btn_divide.grid(row=1, column=1) btn_multiply = tk.Button(self.root, text='*', width=5, height=2, command=lambda: self.button_click('*')) btn_multiply.grid(row=1, column=2) btn_delete = tk.Button(self.root, text='DEL', width=5, height=2, command=self.delete) btn_delete.grid(row=1, column=3) # 第二行 btn_7 = tk.Button(self.root, text='7', width=5, height=2, command=lambda: self.button_click('7')) btn_7.grid(row=2, column=0) btn_8 = tk.Button(self.root, text='8', width=5, height=2, command=lambda: self.button_click('8')) btn_8.grid(row=2, column=1) btn_9 = tk.Button(self.root, text='9', width=5, height=2, command=lambda: self.button_click('9')) btn_9.grid(row=2, column=2) btn_minus = tk.Button(self.root, text='-', width=5, height=2, command=lambda: self.button_click('-')) btn_minus.grid(row=2, column=3) # 第三行 btn_4 = tk.Button(self.root, text='4', width=5, height=2, command=lambda: self.button_click('4')) btn_4.grid(row=3, column=0) btn_5 = tk.Button(self.root, text='5', width=5, height=2, command=lambda: self.button_click('5')) btn_5.grid(row=3, column=1) btn_6 = tk.Button(self.root, text='6', width=5, height=2, command=lambda: self.button_click('6')) btn_6.grid(row=3, column=2) btn_plus = tk.Button(self.root, text='+', width=5, height=2, command=lambda: self.button_click('+')) btn_plus.grid(row=3, column=3) # 第四行 btn_1 = tk.Button(self.root, text='1', width=5, height=2, command=lambda: self.button_click('1')) btn_1.grid(row=4, column=0) btn_2 = tk.Button(self.root, text='2', width=5, height=2, command=lambda: self.button_click('2')) btn_2.grid(row=4, column=1) btn_3 = tk.Button(self.root, text='3', width=5, height=2, command=lambda: self.button_click('3')) btn_3.grid(row=4, column=2) btn_equal = tk.Button(self.root, text='=', width=5, height=2, command=self.calculate) btn_equal.grid(row=4, column=3) # 第五行 btn_0 = tk.Button(self.root, text='0', width=5, height=2, command=lambda: self.button_click('0')) btn_0.grid(row=5, column=0) btn_dot = tk.Button(self.root, text='.', width=5, height=2, command=lambda: self.button_click('.')) btn_dot.grid(row=5, column=1) btn_left = tk.Button(self.root, text='(', width=5, height=2, command=lambda: self.button_click('(')) btn_left.grid(row=5, column=2) btn_right = tk.Button(self.root, text=')', width=5, height=2, command=lambda: self.button_click(')')) btn_right.grid(row=5, column=3) def run(self): self.root.mainloop() def button_click(self, char): self.display.insert(tk.END, char) def clear(self): self.display.delete(0, tk.END) def delete(self): self.display.delete(len(self.display.get()) - 1) def calculate(self): try: result = eval(self.display.get()) self.display.delete(0, tk.END) self.display.insert(tk.END, result) except: self.display.delete(0, tk.END) self.display.insert(tk.END, "Error") if __name__ == '__main__': calculator = Calculator() calculator.run() ``` 这个实现非常基础,只支持基本的加减乘除和括号运算,并且没有做输入安全性检查,仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值