hany.amin.mishr...@gmail.com wrote: > hay , i am new in the coding world,i would like to understand how a python > program is communicating with GUI, for example, if i have a code that > require the user to enter a value ,then this code will do some > calculations and return a value to the user, how to do that?
A command line script adding two numbers will look like this: x = input_int("Enter x:") y = input_int("Enter y:") print("x + y =", x + y) This script will not continue to ask for y until the user has entered the value for x In a GUI you have to provide widgets that allow the user to interact with the GUI . Let's assume make_widget() creates an entry widget and shows it in a window. Then we can create the part of the GUI where the user enters the x and y value with: entry_x = make_widget() entry_y = make_widget() Now we need one more widget to show the result: entry_sum = make_widget() We also need a function that recalculates the contents of entry_sum whenever the user changes x or y: def recalculate_sum(): x = int(entry_x.get_value()) y = int(entry_y.get_value()) entry_sum.set_value(sigma) But when should this function run? We have to connect it to the widgets on whose changes it should react. Such a function is called "callback": # assume that every time the contents of entry_x/y change it calls # self.on_change() entry_x.on_change = recalculate_sum entry_y.on_change = recalculate_sum Finally you enter an infinite loop that waits for and handles GUI events, the most interesting being user activities like typing a digit into one of your widgets. run_event_loop() There a many GUIs, but they all tend to work in a way similar to the one sketched above. Here's a translation of the above pseudo-code to tkinter: import tkinter as tk def make_entry(caption, row): """Create a Label and an Entry. Return the StringVar associated with the Entry. """ # the text displayed to the left of the Entry label = tk.Label(root, text=caption) label.grid(row=row, column=0) var = tk.StringVar() # holds the text entered into the Entry entry = tk.Entry(root, textvariable=var) entry.grid(row=row, column=1, sticky=tk.EW) return var def calculate_sum(*args): """Callback invoked on changes of x or y The GUI passes some arguments (*args) that we are not interested in. """ try: x = int(var_x.get()) y = int(var_y.get()) sigma = x + y except ValueError as err: # if x or y aren't valid integers # show an error message instead of the sum sigma = err var_sum.set(sigma) # Create the main window root = tk.Tk() # Have the second column take all extra space root.columnconfigure(1, weight=1) var_x = make_entry("x", 0) var_y = make_entry("y", 1) var_sum = make_entry("x + y =", 2) # Tell the GUI to invoke calculate_sum() after every change of x or y var_x.trace("w", calculate_sum) var_y.trace("w", calculate_sum) root.mainloop() -- https://mail.python.org/mailman/listinfo/python-list