Which Graphics User Interface (GUI) would you recommend for a beginner? I have seen some examples of Tkinter, wxPython and GTK.
As a beginner, start working with Tkinter to get a feeling what GUI programming is all about. Tkinter is already present in the normal Python installation. If you need fancier widgets later, download wxPython and experiment with that. PyGTK/GTK works best with Linux, the Windows version needs a lot of additional downloads and the installation process is cumbersome.
I will check Tkinter programming first. Any examples that show the difference between console and GUI programming?
Here are simple programs. The console version:
# console sales tax program while True: price = float(raw_input("Enter purchase price: ")) # prevent division by zero error if price != 0: break else: print "price can not be zero!" tax = float(raw_input("Enter sales tax paid: ")) percent = 100 * tax / price print "You paid %0.3f%s sales tax" % (percent, '%')
Now the Tkinter GUI version:
# Tkinter sales tax program from Tkinter import * import tkSimpleDialog # the basic window root = Tk() # create label for result label1 = Label(root) # position the label in window label1.grid(row=0, column=0) # ask for needed data with dialog window # the askfloat dialog window makes certain you entered floating point value # and also prevents you from entering zero which would give divide by zero error price = tkSimpleDialog.askfloat("Price", "Enter purchase price:", parent=root, minvalue=0.01) tax = tkSimpleDialog.askfloat("Tax", "Enter sales tax paid:", parent=root) percent = 100 * tax / price result = "You paid %0.3f%s sales tax" % (percent, '%') # display result string in label1 label1.config(text=result) # event loop needed by GUI, checks for mouse and key events root.mainloop()
Here is the Tkinter sales tax program without the dialog popups ...
# a rather generic Tkinter GUI template for calculations # uses Entry() for data input and Button() to start calculation from Tkinter import * def calculate(): try: # get the enter1 and enter2 values price = float(enter1.get()) tax = float(enter2.get()) # do the calculation percent = 100 * tax / price result = "You paid %0.3f%s sales tax" % (percent, '%') # display the result string label3.config(text=result) except ValueError: label3.config(text='Enter numeric values!') except ZeroDivisionError: label3.config(text='Price can not be zero!') enter1.focus_set() root = Tk() # window geometry is width x height + x_offset + y_offset root.geometry("200x150+30+30") # first entry with label label1 = Label(root, text='Enter purchase price:') label1.grid(row=0, column=0) enter1 = Entry(root, bg='yellow') enter1.grid(row=1, column=0) # second entry with label label2 = Label(root, text='Enter sales tax paid:') label2.grid(row=2, column=0) enter2 = Entry(root, bg='yellow') enter2.grid(row=3, column=0) # do the calculation by clicking the button btn1 = Button(root, text='Calculate Percent', command=calculate) btn1.grid(row=4, column=0) # display the result in this label label3 = Label(root) label3.grid(row=5, column=0) # start cursor in enter1 enter1.focus() # value has been entered in enter1 now switch focus to enter2 enter1.bind('<Return>', func=lambda e: enter2.focus_set()) root.mainloop()