Advertisement
tomearp

20130729 Simple Calculator.py

Jul 29th, 2013
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. #  20130729 Simple Calculator.py
  5. #  
  6.  
  7. # imports
  8. from gi.repository import Gtk
  9.  
  10. # constants
  11. XML_FILE = "calculator.glade"
  12. MAIN_WINDOW_NAME = "Main_window"
  13. INPUT_A_NAME = "InputA_entry"
  14. INPUT_B_NAME = "InputB_entry"
  15. RESULT_NAME = "Result_entry"
  16.  
  17. # class to handle signals coming from the GTK window
  18. class Signal_Handler:
  19.     def on_Main_window_delete_event(self, *args):
  20.         Gtk.main_quit(*args)
  21.    
  22.     def on_Add_button_released(self, button):
  23. # get inputs
  24.         input_a, input_b, input_valid = get_inputs()
  25. # set the result
  26.         if input_valid:
  27.             set_result(input_a + input_b)
  28.         else:
  29.             set_result("Invalid input(s).")
  30. # end on_Add_button_released(self, button)
  31.    
  32.     def on_Subtract_button_released(self, button):
  33. # get inputs
  34.         input_a, input_b, input_valid = get_inputs()
  35. # set the result
  36.         if input_valid:
  37.             set_result(input_a - input_b)
  38.         else:
  39.             set_result("Invalid input(s).")
  40. # end on_Subtract_button_released(self, button)
  41.    
  42.     def on_Multiply_button_released(self, button):
  43. # get inputs
  44.         input_a, input_b, input_valid = get_inputs()
  45. # set the result
  46.         if input_valid:
  47.             set_result(input_a * input_b)
  48.         else:
  49.             set_result("Invalid input(s).")
  50. # end on_Multiply_button_released(self, button)
  51.    
  52.     def on_Divide_button_released(self, button):
  53. # get inputs
  54.         input_a, input_b, input_valid = get_inputs()
  55. # set the result
  56.         if input_valid:
  57.             if (input_b != 0.0):
  58.                 set_result(input_a / input_b)
  59.             else:
  60.                 set_result("Cannot divide by zero.")
  61.         else:
  62.             set_result("Invalid input(s).")
  63. # end on_Divide_button_released(self, button)
  64.    
  65.     def on_ANS_A_button_released(self, button):
  66.         copy_result(RESULT_NAME, INPUT_A_NAME)
  67. # end on_ANS_A_button_released(self, button)
  68.  
  69.     def on_ANS_B_button_released(self, button):
  70.         copy_result(RESULT_NAME, INPUT_B_NAME)
  71. # end on_ANS_B_button_released(self, button)
  72. # end Signal_Handler class         
  73.  
  74. # creates the main window.
  75. def create_window():
  76. # declare builder globally so it can be used elsewhere
  77.     global builder
  78.     builder = Gtk.Builder()
  79. # point the builder to the XML file describing the layout
  80.     builder.add_from_file(XML_FILE)
  81. # connect the builder to the signal handler
  82.     builder.connect_signals(Signal_Handler())
  83. # get the window object
  84.     window = builder.get_object(MAIN_WINDOW_NAME)
  85. # show the window  
  86.     window.show_all()
  87. # end create_window()
  88.  
  89. def get_inputs():
  90.     input_valid = True
  91. # get input A
  92.     input_a_object = builder.get_object(INPUT_A_NAME)
  93. # check if a number has been entered
  94.     if is_a_float(input_a_object.get_text()):
  95. # if it has
  96.         input_a = float(input_a_object.get_text())
  97.     else:
  98. # if not
  99.         input_a = 0.0
  100.         input_a_object.set_text("Enter a number.")
  101.         input_valid = False
  102. # get input B
  103.     input_b_object = builder.get_object(INPUT_B_NAME)
  104. # check if a number has been entered
  105.     if is_a_float(input_b_object.get_text()):
  106. # if it has
  107.         input_b = float(input_b_object.get_text())
  108.     else:
  109. # if not
  110.         input_b = 0.0
  111.         input_b_object.set_text("Enter a number.")     
  112.         input_valid = False
  113. # return inputs
  114.     return input_a, input_b, input_valid   
  115. # end get_inputs()
  116.  
  117. def is_a_float(input):
  118. # try to convert the input to a float.
  119. # if you can't then it's likely not a number
  120.     try:
  121.         float(input)
  122.         return True
  123.     except ValueError:
  124.         return False
  125. # end is_a_float(input)
  126.  
  127. def set_result(result):
  128. # output result
  129.     builder.get_object(RESULT_NAME).set_text(str(result))
  130. # end set_result(result)
  131.  
  132. def copy_result(result_name, input_name):
  133. # copy result to an input
  134.     result_object = builder.get_object(result_name)
  135.     input_object = builder.get_object(input_name)
  136.     if is_a_float(result_object.get_text()):
  137.         input_object.set_text(result_object.get_text())
  138. # end copy_result(result_name, input_name)
  139.  
  140. # main function
  141. def main():
  142.     create_window()
  143.     Gtk.main()
  144.     return 0
  145. # end main()
  146.  
  147. if __name__ == '__main__':
  148.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement