最终的运行效果图(程序见序号7):


  1.  
  1. #!/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 *******************
    # =====>>>>>>内容概览
    # =====>>>>>>内容概览
  2.  
  3. '''
  4.  
  5. # ------------------------------------------------------------
    # # 1、窗口以及相关的菜单栏
    # ------------------------------------------------------------
  6.  
  7. # ------------------------------------------------------------
    # # 2、建立按钮
    # ------------------------------------------------------------
  8.  
  9. # ------------------------------------------------------------
    # # 3、设置显示框, 将输入绑定到显示框
    # # # 增加位置: def __init__(self):; def click_button(self, event):
    # ------------------------------------------------------------
  10.  
  11. # ------------------------------------------------------------
    # # 4、实现基本的计算器功能
    # # # 改动位置位置: def click_button(self, event):
    # ------------------------------------------------------------
  12.  
  13. # ------------------------------------------------------------
    # # 5、实现基本的计算器功能,补充错误检测
    # # # 改动位置位置: def click_button(self, event):
    # ------------------------------------------------------------
  14.  
  15. # ------------------------------------------------------------
    # # 6、实现基本的计算器功能,补充错误检测,补充‘C’后退输入功能
    # # # 改动位置位置: def click_button(self, event):
    # ------------------------------------------------------------
  16.  
  17. # ------------------------------------------------------------
    # # 7、(完成全部设计)实现基本的计算器功能,补充错误检测, 修改‘C’为清楚功能, '<=='为后退功能
    # # # 改动位置位置: def click_button(self, event):
    # ------------------------------------------------------------
  18.  
  19. '''
  1.  

  1. # ------------------------------------------------分割线-------------------------------------------------
    # ------------------------------------------------分割线-------------------------------------------------
    # ------------------------------------------------分割线-------------------------------------------------

  1. '''
  2. # ------------------------------------------------------------
  3. # # 1、窗口以及相关的菜单栏
  4. # ------------------------------------------------------------
  5. '''
  6. class Calculator:
  7. import tkinter as tk
  8. import tkinter.messagebox as mbox
  9.  
  10. def __init__(self):
  11. # 生成一个窗口对象
  12. self.window = self.tk.Tk()
  13. # 命名窗口对象的显示title
  14. self.window.title('计算器')
  15. # 设置窗口的大小 minsize最小 maxsize最大
  16. self.window.minsize(240,325)
  17. self.window.maxsize(240, 325)
  18. # 设置菜单
  19. self.set_menu()
  20. # 将窗口放入主消息队列
  21. self.window.mainloop()
  22.  
  23. def set_menu(self):
  24. '''
  25. 设置菜单
  26. :return: None
  27. '''
  28. # 创建总菜单
  29. menubar = self.tk.Menu(self.window)
  30. # 创建一个下拉菜单,并且加入文件菜单
  31. filemenu = self.tk.Menu(menubar, tearoff=False)
  32. # 创建菜单中的选项
  33. filemenu.add_command(label='退出计算器', command=self.window.quit )
  34.  
  35. # print author的函数
  36. def show_author():
  37. self.mbox.showinfo(title='作者信息',message='作者:许建JY小脚丫\n联系邮箱:******print@foxmail.com')
  38.  
  39. filemenu.add_command(label='作者信息', command=show_author)
  40. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  41. menubar.add_cascade(label='查看', menu=filemenu)
  42. # 显示总菜单
  43. self.window.config(menu=menubar)
  44.  
  45. start = Calculator()

  

运行效果图1:

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 2、建立按钮
  5. # ------------------------------------------------------------
  6. '''
  7.  
  8. class Calculator:
  9. import tkinter as tk
  10. import tkinter.messagebox as mbox
  11.  
  12. def __init__(self):
  13. # 生成一个窗口对象
  14. self.window = self.tk.Tk()
  15. # 命名窗口对象的显示title
  16. self.window.title('计算器')
  17. # 设置窗口的大小 minsize最小 maxsize最大
  18. self.window.minsize(240,325)
  19. self.window.maxsize(240, 325)
  20. # 是否清空显示框判定参数
  21. # ????
  22. # 设置菜单
  23. self.set_menu()
  24. # 设置按钮组件
  25. self.set_buttons()
  26. # 将窗口放入主消息队列
  27. self.window.mainloop()
  28.  
  29. def set_menu(self):
  30. '''
  31. 设置菜单
  32. :return: None
  33. '''
  34. # 创建总菜单
  35. menubar = self.tk.Menu(self.window)
  36. # 创建一个下拉菜单,并且加入文件菜单
  37. filemenu = self.tk.Menu(menubar, tearoff=False)
  38. # 创建菜单中的选项
  39. filemenu.add_command(label='退出计算器', command=self.window.quit )
  40.  
  41. # print author的函数
  42. def show_author():
  43. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  44.  
  45. filemenu.add_command(label='作者信息', command=show_author)
  46. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  47. menubar.add_cascade(label='查看', menu=filemenu)
  48. # 显示总菜单
  49. self.window.config(menu=menubar)
  50.  
  51. def set_buttons(self):
  52. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  53. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  54. # 7
  55. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  56. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  57. # 8
  58. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  59. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  60. # 9
  61. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  62. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  63. # +
  64. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  65. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  66.  
  67. # 4
  68. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  69. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  70. # 5
  71. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  72. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  73. # 6
  74. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  75. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  76. # -
  77. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  78. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  79.  
  80. # 1
  81. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  82. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  83. # 2
  84. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  85. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  86. # 3
  87. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  88. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  89. # *
  90. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  91. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  92.  
  93. # 0
  94. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  95. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  96. # .
  97. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  98. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  99. # /
  100. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  101. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  102.  
  103. # C后退
  104. btn_back = self.tk.Button( text='C', bd=2, font='黑体')
  105. btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
  106. # =
  107. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  108. btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
  109.  
  110. start = Calculator()

  

运行效果图2:

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 3、设置显示框, 将输入绑定到显示框
  5. # # # 增加位置: def __init__(self):; def click_button(self, event):
  6. # ------------------------------------------------------------
  7. '''
  8.  
  9. class Calculator:
  10. import tkinter as tk
  11. import tkinter.messagebox as mbox
  12.  
  13. def __init__(self):
  14. # 生成一个窗口对象
  15. self.window = self.tk.Tk()
  16. # 命名窗口对象的显示title
  17. self.window.title('计算器')
  18. # 设置窗口的大小 minsize最小 maxsize最大
  19. self.window.minsize(240, 290)
  20. self.window.maxsize(240, 290)
  21. # 是否清空显示框判定参数
  22. # ????
  23. # 设置菜单
  24. self.set_menu()
  25. # 设置显示框
  26. self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
  27. self.label_show.place(x=0, y=0, width=240,height=80)
  28. # 设置按钮组件
  29. self.set_buttons()
  30. # 将窗口放入主消息队列
  31. self.window.mainloop()
  32.  
  33. def set_menu(self):
  34. '''
  35. 设置菜单
  36. :return: None
  37. '''
  38. # 创建总菜单
  39. menubar = self.tk.Menu(self.window)
  40. # 创建一个下拉菜单,并且加入文件菜单
  41. filemenu = self.tk.Menu(menubar, tearoff=False)
  42. # 创建菜单中的选项
  43. filemenu.add_command(label='退出计算器', command=self.window.quit )
  44.  
  45. # print author的函数
  46. def show_author():
  47. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  48.  
  49. filemenu.add_command(label='作者信息', command=show_author)
  50. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  51. menubar.add_cascade(label='查看', menu=filemenu)
  52. # 显示总菜单
  53. self.window.config(menu=menubar)
  54.  
  55. def set_buttons(self):
  56. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  57. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  58. # 7
  59. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  60. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  61. # 8
  62. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  63. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  64. # 9
  65. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  66. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  67. # +
  68. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  69. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  70.  
  71. # 4
  72. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  73. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  74. # 5
  75. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  76. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  77. # 6
  78. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  79. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  80. # -
  81. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  82. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  83.  
  84. # 1
  85. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  86. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  87. # 2
  88. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  89. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  90. # 3
  91. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  92. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  93. # *
  94. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  95. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  96.  
  97. # 0
  98. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  99. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  100. # .
  101. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  102. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  103. # /
  104. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  105. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  106.  
  107. # C后退
  108. btn_back = self.tk.Button( text='C', bd=2, font='黑体')
  109. btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
  110. # =
  111. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  112. btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
  113.  
  114. # 绑定Button的点击事件
  115. btn7.bind_class('Button', '<Button-1>', self.click_button)
  116.  
  117. def click_button(self, event):
  118.  
  119. # 输入的按键信息
  120. input_event = event.widget['text']
  121. # 输入的按键信息显示
  122. self.label_show['text'] = self.label_show['text'] + input_event
  123.  
  124. start = Calculator()

运行效果图3:

  

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 4、实现基本的计算器功能
  5. # # # 改动位置位置: def click_button(self, event):
  6. # ------------------------------------------------------------
  7. '''
  8.  
  9. class Calculator:
  10. import tkinter as tk
  11. import tkinter.messagebox as mbox
  12.  
  13. def __init__(self):
  14. # 生成一个窗口对象
  15. self.window = self.tk.Tk()
  16. # 命名窗口对象的显示title
  17. self.window.title('计算器')
  18. # 设置窗口的大小 minsize最小 maxsize最大
  19. self.window.minsize(240, 290)
  20. self.window.maxsize(240, 290)
  21. # 是否清空显示框判定参数
  22. # ????
  23. # 设置菜单
  24. self.set_menu()
  25. # 设置显示框
  26. self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
  27. self.label_show.place(x=0, y=0, width=240,height=80)
  28. # 设置按钮组件
  29. self.set_buttons()
  30. # 将窗口放入主消息队列
  31. self.window.mainloop()
  32.  
  33. def set_menu(self):
  34. '''
  35. 设置菜单
  36. :return: None
  37. '''
  38. # 创建总菜单
  39. menubar = self.tk.Menu(self.window)
  40. # 创建一个下拉菜单,并且加入文件菜单
  41. filemenu = self.tk.Menu(menubar, tearoff=False)
  42. # 创建菜单中的选项
  43. filemenu.add_command(label='退出计算器', command=self.window.quit )
  44.  
  45. # print author的函数
  46. def show_author():
  47. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  48.  
  49. filemenu.add_command(label='作者信息', command=show_author)
  50. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  51. menubar.add_cascade(label='查看', menu=filemenu)
  52. # 显示总菜单
  53. self.window.config(menu=menubar)
  54.  
  55. def set_buttons(self):
  56. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  57. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  58. # 7
  59. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  60. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  61. # 8
  62. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  63. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  64. # 9
  65. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  66. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  67. # +
  68. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  69. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  70.  
  71. # 4
  72. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  73. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  74. # 5
  75. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  76. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  77. # 6
  78. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  79. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  80. # -
  81. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  82. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  83.  
  84. # 1
  85. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  86. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  87. # 2
  88. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  89. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  90. # 3
  91. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  92. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  93. # *
  94. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  95. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  96.  
  97. # 0
  98. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  99. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  100. # .
  101. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  102. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  103. # /
  104. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  105. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  106.  
  107. # C后退
  108. btn_back = self.tk.Button( text='C', bd=2, font='黑体')
  109. btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
  110. # =
  111. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  112. btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
  113.  
  114. # 绑定Button的点击事件
  115. btn7.bind_class('Button', '<Button-1>', self.click_button)
  116.  
  117. def click_button(self, event):
  118.  
  119. # 输入的按键信息
  120. input_event = event.widget['text']
  121. # 输入的按键信息显示
  122. self.label_show['text'] = self.label_show['text'] + input_event
  123.  
  124. # 进行普通计算
  125. if event.widget['text'] == '=':
  126. res_bit = 2 # 计算保留的位数
  127. res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
  128. # print(type(res))
  129. self.label_show['text'] = str(round(float(res), res_bit ))
  1. start = Calculator()

  

运行效果图4:

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 5、实现基本的计算器功能,补充错误检测
  5. # # # 改动位置位置: def click_button(self, event):
  6. # ------------------------------------------------------------
  7. '''
  8.  
  9. class Calculator:
  10. import tkinter as tk
  11. import tkinter.messagebox as mbox
  12.  
  13. def __init__(self):
  14. # 生成一个窗口对象
  15. self.window = self.tk.Tk()
  16. # 命名窗口对象的显示title
  17. self.window.title('计算器')
  18. # 设置窗口的大小 minsize最小 maxsize最大
  19. self.window.minsize(240, 290)
  20. self.window.maxsize(240, 290)
  21. # 是否清空显示框判定参数
  22. # ????
  23. # 设置菜单
  24. self.set_menu()
  25. # 设置显示框
  26. self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
  27. self.label_show.place(x=0, y=0, width=240,height=80)
  28. # 设置按钮组件
  29. self.set_buttons()
  30. # 将窗口放入主消息队列
  31. self.window.mainloop()
  32.  
  33. def set_menu(self):
  34. '''
  35. 设置菜单
  36. :return: None
  37. '''
  38. # 创建总菜单
  39. menubar = self.tk.Menu(self.window)
  40. # 创建一个下拉菜单,并且加入文件菜单
  41. filemenu = self.tk.Menu(menubar, tearoff=False)
  42. # 创建菜单中的选项
  43. filemenu.add_command(label='退出计算器', command=self.window.quit )
  44.  
  45. # print author的函数
  46. def show_author():
  47. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  48.  
  49. filemenu.add_command(label='作者信息', command=show_author)
  50. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  51. menubar.add_cascade(label='查看', menu=filemenu)
  52. # 显示总菜单
  53. self.window.config(menu=menubar)
  54.  
  55. def set_buttons(self):
  56. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  57. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  58. # 7
  59. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  60. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  61. # 8
  62. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  63. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  64. # 9
  65. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  66. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  67. # +
  68. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  69. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  70.  
  71. # 4
  72. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  73. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  74. # 5
  75. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  76. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  77. # 6
  78. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  79. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  80. # -
  81. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  82. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  83.  
  84. # 1
  85. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  86. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  87. # 2
  88. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  89. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  90. # 3
  91. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  92. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  93. # *
  94. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  95. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  96.  
  97. # 0
  98. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  99. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  100. # .
  101. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  102. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  103. # /
  104. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  105. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  106.  
  107. # C后退
  108. btn_back = self.tk.Button( text='C', bd=2, font='黑体')
  109. btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
  110. # =
  111. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  112. btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
  113.  
  114. # 绑定Button的点击事件
  115. btn7.bind_class('Button', '<Button-1>', self.click_button)
  116.  
  117. def click_button(self, event):
  118.  
  119. # 输入的按键信息
  120. input_event = event.widget['text']
  121. # 输入的按键信息显示
  122. self.label_show['text'] = self.label_show['text'] + input_event
  123.  
  124. # 进行普通计算
  125. if event.widget['text'] == '=':
  126. try:
  127. res_bit = 2 # 计算保留的位数
  128. res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
  129. # print(type(res))
  130. self.label_show['text'] = str(round(float(res), res_bit))
  131. except ZeroDivisionError:
  132. # 除法时,除数不能为0
  133. self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
  134. except:
  135. self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
  136.  
  137. start = Calculator()

  

运行效果图5:

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 6、实现基本的计算器功能,补充错误检测,补充‘C’后退输入功能
  5. # # # 改动位置位置: def click_button(self, event):
  6. # ------------------------------------------------------------
  7. '''
  8.  
  9. class Calculator:
  10. import tkinter as tk
  11. import tkinter.messagebox as mbox
  12.  
  13. def __init__(self):
  14. # 生成一个窗口对象
  15. self.window = self.tk.Tk()
  16. # 命名窗口对象的显示title
  17. self.window.title('计算器')
  18. # 设置窗口的大小 minsize最小 maxsize最大
  19. self.window.minsize(240, 290)
  20. self.window.maxsize(240, 290)
  21. # 是否清空显示框判定参数
  22. # ????
  23. # 设置菜单
  24. self.set_menu()
  25. # 设置显示框
  26. self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
  27. self.label_show.place(x=0, y=0, width=240,height=80)
  28. # 设置按钮组件
  29. self.set_buttons()
  30. # 将窗口放入主消息队列
  31. self.window.mainloop()
  32.  
  33. def set_menu(self):
  34. '''
  35. 设置菜单
  36. :return: None
  37. '''
  38. # 创建总菜单
  39. menubar = self.tk.Menu(self.window)
  40. # 创建一个下拉菜单,并且加入文件菜单
  41. filemenu = self.tk.Menu(menubar, tearoff=False)
  42. # 创建菜单中的选项
  43. filemenu.add_command(label='退出计算器', command=self.window.quit )
  44.  
  45. # print author的函数
  46. def show_author():
  47. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  48.  
  49. filemenu.add_command(label='作者信息', command=show_author)
  50. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  51. menubar.add_cascade(label='查看', menu=filemenu)
  52. # 显示总菜单
  53. self.window.config(menu=menubar)
  54.  
  55. def set_buttons(self):
  56. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  57. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  58. # 7
  59. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  60. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  61. # 8
  62. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  63. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  64. # 9
  65. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  66. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  67. # +
  68. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  69. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  70.  
  71. # 4
  72. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  73. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  74. # 5
  75. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  76. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  77. # 6
  78. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  79. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  80. # -
  81. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  82. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  83.  
  84. # 1
  85. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  86. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  87. # 2
  88. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  89. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  90. # 3
  91. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  92. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  93. # *
  94. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  95. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  96.  
  97. # 0
  98. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  99. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  100. # .
  101. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  102. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  103. # /
  104. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  105. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  106.  
  107. # C后退
  108. btn_back = self.tk.Button( text='C', bd=2, font='黑体')
  109. btn_back.place( x=x0, y=y0+y_width*4, width=x_width*1, height=y_width)
  110. # =
  111. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  112. btn_equal.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width*3, height=y_width)
  113.  
  114. # 绑定Button的点击事件
  115. btn7.bind_class('Button', '<Button-1>', self.click_button)
  116.  
  117. def click_button(self, event):
  118.  
  119. # 输入的按键信息
  120. input_event = event.widget['text']
  121. # 输入的按键信息显示
  122. self.label_show['text'] = self.label_show['text'] + input_event
  123.  
  124. # 进行普通计算
  125. if event.widget['text'] == '=':
  126. try:
  127. res_bit = 2 # 计算保留的位数
  128. res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
  129. # print(type(res))
  130. self.label_show['text'] = str(round(float(res), res_bit))
  131. except ZeroDivisionError:
  132. # 除法时,除数不能为0
  133. self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
  134. except:
  135. self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
  136.  
  137. elif event.widget['text'] == 'C':
  138. back_res = self.label_show['text'][:-2] # 点击的‘C’也计算在内,因此是倒数2位去掉
  139. self.label_show['text'] = back_res
  140.  
  141. start = Calculator()

  

运行效果图6:

  1. # ------------------------------------------------分割线-------------------------------------------------
  2. '''
  3. # ------------------------------------------------------------
  4. # # 7、(完成全部设计)实现基本的计算器功能,补充错误检测, 修改‘C’为清楚功能, '<=='为后退功能
  5. # # # 改动位置位置: def click_button(self, event):
  6. # ------------------------------------------------------------
  7. '''
  8.  
  9. class Calculator:
  10. import tkinter as tk
  11. import tkinter.messagebox as mbox
  12.  
  13. def __init__(self):
  14. # 生成一个窗口对象
  15. self.window = self.tk.Tk()
  16. # 命名窗口对象的显示title
  17. self.window.title('计算器')
  18. # 设置窗口的大小 minsize最小 maxsize最大
  19. self.window.minsize(240, 290)
  20. self.window.maxsize(240, 290)
  21. # 是否清空显示框判定参数
  22. # ????
  23. # 设置菜单
  24. self.set_menu()
  25. # 设置显示框
  26. self.label_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black')
  27. self.label_show.place(x=0, y=0, width=240,height=80)
  28. # 设置按钮组件
  29. self.set_buttons()
  30. # 将窗口放入主消息队列
  31. self.window.mainloop()
  32.  
  33. def set_menu(self):
  34. '''
  35. 设置菜单
  36. :return: None
  37. '''
  38. # 创建总菜单
  39. menubar = self.tk.Menu(self.window)
  40. # 创建一个下拉菜单,并且加入文件菜单
  41. filemenu = self.tk.Menu(menubar, tearoff=False)
  42. # 创建菜单中的选项
  43. filemenu.add_command(label='退出计算器', command=self.window.quit )
  44.  
  45. # print author的函数
  46. def show_author():
  47. self.mbox.showinfo(title='作者信息',message='作者:JY小脚丫\n联系邮箱:******print@foxmail.com')
  48.  
  49. filemenu.add_command(label='作者信息', command=show_author)
  50. # 将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
  51. menubar.add_cascade(label='查看', menu=filemenu)
  52. # 显示总菜单
  53. self.window.config(menu=menubar)
  54.  
  55. def set_buttons(self):
  56. # 基础坐标, x0, y0,开始坐标; x_width, y_width 间隔
  57. x0, y0, x_width, y_width,height = 0, 90, 60, 40, 40
  58. # 7
  59. btn7 = self.tk.Button(text='7', bd=2, font='黑体')
  60. btn7.place( x=x0, y=y0, width=x_width, height=y_width)
  61. # 8
  62. btn8 = self.tk.Button(text='8', bd=2, font='黑体')
  63. btn8.place( x=x0+x_width*1, y=y0, width=x_width, height=y_width)
  64. # 9
  65. btn9 = self.tk.Button(text='9', bd=2, font='黑体')
  66. btn9.place( x=x0+x_width*2, y=y0, width=x_width, height=y_width)
  67. # +
  68. btn_add = self.tk.Button(text='+', bd=2, font='黑体')
  69. btn_add.place( x=x0+x_width*3, y=y0, width=x_width, height=y_width)
  70.  
  71. # 4
  72. btn4 = self.tk.Button(text='4', bd=2, font='黑体')
  73. btn4.place( x=x0, y=y0+y_width, width=x_width, height=y_width)
  74. # 5
  75. btn5 = self.tk.Button(text='5', bd=2, font='黑体')
  76. btn5.place( x=x0+x_width*1, y=y0+y_width, width=x_width, height=y_width)
  77. # 6
  78. btn6 = self.tk.Button(text='6', bd=2, font='黑体')
  79. btn6.place( x=x0+x_width*2, y=y0+y_width, width=x_width, height=y_width)
  80. # -
  81. btn_subtract = self.tk.Button(text='-', bd=2, font='黑体')
  82. btn_subtract.place( x=x0+x_width*3, y=y0+y_width, width=x_width, height=y_width)
  83.  
  84. # 1
  85. btn1 = self.tk.Button(text='1', bd=2, font='黑体')
  86. btn1.place( x=x0, y=y0+y_width*2, width=x_width, height=y_width)
  87. # 2
  88. btn2 = self.tk.Button(text='2', bd=2, font='黑体')
  89. btn2.place( x=x0+x_width*1, y=y0+y_width*2, width=x_width, height=y_width)
  90. # 3
  91. btn3 = self.tk.Button(text='3', bd=2, font='黑体')
  92. btn3.place( x=x0+x_width*2, y=y0+y_width*2, width=x_width, height=y_width)
  93. # *
  94. btn_mutiply = self.tk.Button(text='*', bd=2, font='黑体')
  95. btn_mutiply.place( x=x0+x_width*3, y=y0+y_width*2, width=x_width, height=y_width)
  96.  
  97. # 0
  98. btn0 = self.tk.Button(text='0', bd=2, font='黑体')
  99. btn0.place( x=x0, y=y0+y_width*3, width=x_width*2, height=y_width)
  100. # .
  101. btn_point = self.tk.Button(text='.', bd=2, font='黑体')
  102. btn_point.place( x=x0+x_width*2, y=y0+y_width*3, width=x_width, height=y_width)
  103. # /
  104. btn_divid = self.tk.Button(text='/', bd=2, font='黑体')
  105. btn_divid.place( x=x0+x_width*3, y=y0+y_width*3, width=x_width, height=y_width)
  106.  
  107. # C后退
  108. btn_clear = self.tk.Button( text='C', bd=2, font='黑体')
  109. btn_clear.place( x=x0, y=y0+y_width*4, width=x_width, height=y_width)
  110.  
  111. # C后退
  112. btn_back = self.tk.Button( text='<==', bd=2, font='黑体')
  113. btn_back.place( x=x0+x_width*1, y=y0+y_width*4, width=x_width, height=y_width)
  114.  
  115. # =
  116. btn_equal = self.tk.Button( text='=', bd=2, font='黑体')
  117. btn_equal.place( x=x0+x_width*2, y=y0+y_width*4, width=x_width*2, height=y_width)
  118.  
  119. # 绑定Button的点击事件
  120. btn7.bind_class('Button', '<Button-1>', self.click_button)
  121.  
  122. def click_button(self, event):
  123.  
  124. # 获取点击的按钮信息信息
  125. input_event = event.widget['text']
  126. # 输入的按钮信息显示
  127. self.label_show['text'] = self.label_show['text'] + input_event
  128. # 异常捕获
  129. try:
  130. # 计算符号
  131. cal_symbol = ['+', '-', '*', '/']
  132. # 判定运算符号重复的时候,使用最后输入的符号
  133. if self.label_show['text'][-1] in cal_symbol and self.label_show['text'][-2] in cal_symbol:
  134. # 取重复符号前面的内容
  135. header = self.label_show['text'][:-2]
  136. footer = self.label_show['text'][-1]
  137. self.label_show['text'] = header + footer
  138. except:
  139. pass
  140.  
  141. # 进行普通计算
  142. if event.widget['text'] == '=':
  143. # 异常捕获
  144. try:
  145. res_bit = 2 # 计算保留的位数
  146. res = eval(self.label_show['text'][:-1]) # 计算点击 “=” 之前的计算表达式
  147. # print(type(res))
  148. self.label_show['text'] = str(round(float(res), res_bit))
  149. except ZeroDivisionError:
  150. # 除法时,除数不能为0
  151. self.mbox.showerror(title='错误', message='除法计算时!除数不能为0!')
  152. except:
  153. self.mbox.showerror(title='未知名错误', message='算式错误,请检查!')
  154.  
  155. elif event.widget['text'] == '<==':
  156. # 点击的‘<==’也计算在内,它占3个字符,因此是倒数4位去掉
  157. back_res = self.label_show['text'][:-4]
  158. self.label_show['text'] = back_res
  159.  
  160. elif event.widget['text'] == 'C':
  161. # 点击的‘C’也计算在内,因此是倒数2位去掉
  162. self.label_show['text'] = ''
  163.  
  164. start = Calculator()

  

运行效果图7(最终的运行效果):

project1_calculator(使用tkinter实现python计算器,含有具体过程与注释)的更多相关文章

  1. 作业1开发一个简单的python计算器

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  2. python 计算器的(正则匹配+递归)

    经过2天的长时间的战斗,python计算器终于完成了. import re val="1-2*((60-30*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3 ...

  3. Python计算器实操

    要求: 开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...

  4. 7_python之路之python计算器

    7_python之路之python计算器 1.程序说明:Readme.cmd 1.程序文件及说明: calculator.py 2.python版本:python-3.5.3 3.程序使用:pytho ...

  5. 老男孩python作业5-开发一个简单的python计算器

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  6. Python程序的执行过程原理(解释型语言和编译型语言)

    Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...

  7. Python程序的执行过程 解释型语言和编译型语言

    转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...

  8. 说说Python程序的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  9. 转载 - Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)

    出处:http://www.cnblogs.com/ifantastic/p/3185665.html Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LT ...

随机推荐

  1. Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用

    一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境       2> 练习命令历史.命令别名       3 ...

  2. java url中文参数乱码

    String city=new String(city_name.getBytes("ISO-8859-1"), "UTF-8");

  3. Jmeter json和正在提取及断言

    Jmeter  json和正在提取及断言 一.提取所需要断言的内容: 响应数据如下:加入需要提取userid为10477的值 { "pub": { , ", " ...

  4. spark hive java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

    java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT 这个问题我感觉是hive给spark挖的一个大坑.spark版本是2.4.4,hive是3 这个 ...

  5. 3、Cookie与Session之间有哪些区别或者是优缺点?

    Cookie与Session之间有哪些区别或者是优缺点? 知道了Cookie与Session,我们来做一些简单的总结:   1.Cookie可以存储在浏览器或者本地,session只能存在服务器    ...

  6. JVM简介及类加载机制(一)

    JVM介绍: 目标:JVM运行字节码文件,根据JVM的日志调节程序,对于底层原理有一定的了解 1. 类加载 在JAVA代码中,类型的加载,连接与初始化都是在程序运行期间完成的,提供了灵活性增加了更多的 ...

  7. 1060 Are They Equal (25 分)

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  8. POJ 1673 EXOCENTER OF A TRIANGLE(解三角形重心)

    题目链接:http://poj.org/problem?id=1673 AC代码: #include<cstdio> #include<cmath> #include<a ...

  9. Comet OJ - Contest #4 B题 奇偶性

    题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...

  10. C# 十六进制转换ASCII

     string s = "这里放十六进制字符串";             byte[]buff=new byte[s.Length/2];             int ind ...