Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # 20130729 Simple Calculator.py
- #
- # imports
- from gi.repository import Gtk
- # constants
- XML_FILE = "calculator.glade"
- MAIN_WINDOW_NAME = "Main_window"
- INPUT_A_NAME = "InputA_entry"
- INPUT_B_NAME = "InputB_entry"
- RESULT_NAME = "Result_entry"
- # class to handle signals coming from the GTK window
- class Signal_Handler:
- def on_Main_window_delete_event(self, *args):
- Gtk.main_quit(*args)
- def on_Add_button_released(self, button):
- # get inputs
- input_a, input_b, input_valid = get_inputs()
- # set the result
- if input_valid:
- set_result(input_a + input_b)
- else:
- set_result("Invalid input(s).")
- # end on_Add_button_released(self, button)
- def on_Subtract_button_released(self, button):
- # get inputs
- input_a, input_b, input_valid = get_inputs()
- # set the result
- if input_valid:
- set_result(input_a - input_b)
- else:
- set_result("Invalid input(s).")
- # end on_Subtract_button_released(self, button)
- def on_Multiply_button_released(self, button):
- # get inputs
- input_a, input_b, input_valid = get_inputs()
- # set the result
- if input_valid:
- set_result(input_a * input_b)
- else:
- set_result("Invalid input(s).")
- # end on_Multiply_button_released(self, button)
- def on_Divide_button_released(self, button):
- # get inputs
- input_a, input_b, input_valid = get_inputs()
- # set the result
- if input_valid:
- if (input_b != 0.0):
- set_result(input_a / input_b)
- else:
- set_result("Cannot divide by zero.")
- else:
- set_result("Invalid input(s).")
- # end on_Divide_button_released(self, button)
- def on_ANS_A_button_released(self, button):
- copy_result(RESULT_NAME, INPUT_A_NAME)
- # end on_ANS_A_button_released(self, button)
- def on_ANS_B_button_released(self, button):
- copy_result(RESULT_NAME, INPUT_B_NAME)
- # end on_ANS_B_button_released(self, button)
- # end Signal_Handler class
- # creates the main window.
- def create_window():
- # declare builder globally so it can be used elsewhere
- global builder
- builder = Gtk.Builder()
- # point the builder to the XML file describing the layout
- builder.add_from_file(XML_FILE)
- # connect the builder to the signal handler
- builder.connect_signals(Signal_Handler())
- # get the window object
- window = builder.get_object(MAIN_WINDOW_NAME)
- # show the window
- window.show_all()
- # end create_window()
- def get_inputs():
- input_valid = True
- # get input A
- input_a_object = builder.get_object(INPUT_A_NAME)
- # check if a number has been entered
- if is_a_float(input_a_object.get_text()):
- # if it has
- input_a = float(input_a_object.get_text())
- else:
- # if not
- input_a = 0.0
- input_a_object.set_text("Enter a number.")
- input_valid = False
- # get input B
- input_b_object = builder.get_object(INPUT_B_NAME)
- # check if a number has been entered
- if is_a_float(input_b_object.get_text()):
- # if it has
- input_b = float(input_b_object.get_text())
- else:
- # if not
- input_b = 0.0
- input_b_object.set_text("Enter a number.")
- input_valid = False
- # return inputs
- return input_a, input_b, input_valid
- # end get_inputs()
- def is_a_float(input):
- # try to convert the input to a float.
- # if you can't then it's likely not a number
- try:
- float(input)
- return True
- except ValueError:
- return False
- # end is_a_float(input)
- def set_result(result):
- # output result
- builder.get_object(RESULT_NAME).set_text(str(result))
- # end set_result(result)
- def copy_result(result_name, input_name):
- # copy result to an input
- result_object = builder.get_object(result_name)
- input_object = builder.get_object(input_name)
- if is_a_float(result_object.get_text()):
- input_object.set_text(result_object.get_text())
- # end copy_result(result_name, input_name)
- # main function
- def main():
- create_window()
- Gtk.main()
- return 0
- # end main()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement