In my last post, I attempted to create a Tkinter GUI for my “Coolness” app, placing the widgets (that is, the buttons, boxes and other objects that make up a GUI interface) using the pack() method only. This seemed to do little more than make a mess. Luckily there is another, more precise method in Tkinter for placing widgets: the grid() method. This is how to tell the widgets where to go when you are serious about getting them to obey you. I therefore sent pack() packing and rewrote my code. Here is Apply Coolness 2.0:
# Apply Coolness 2.0 # Import my cool function first! from cool_tools import coolness from Tkinter import * import ttk # Create the root window root = Tk() root.title("Apply Coolness") # Create the frame to hold the boxes & button mainframe = ttk.Frame(root) # "Sticky" tells the frame to expand in all directions # to fill up the root window. mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) # Set the variable for the name entered by the user name = StringVar() # Label that tells the user what to do. lblPrompt = ttk.Label(mainframe, text="Enter the name of the person to be made cool:") # Row 0, Column 0 = upper left corner of mainframe. # The 'grid' option for each successive widget will use row # and column coordinates in relation to this one. lblPrompt.grid(column=0, row=0) # Box in which user enters a person's name. txtEntry = ttk.Entry(mainframe,width=7) # column 0, row 1 = place the entry widget directly # below the label widget, which is row 0. txtEntry.grid(column=0, row=1, sticky=(N, W, E, S)) # The button that activates the coolness function. btnCool = ttk.Button(mainframe,text="Make Cool") # Row 2 = the row below the entry box. btnCool.grid(column=0, row=2, sticky=(N, W, E, S)) # Box that displays the result of the procedure. txtResult = Text(mainframe, width = 20, height = 10) txtResult.grid(column=0, row=3, sticky=(E, W)) # Set the focus to the entry box so the user won't have to # click on it first. txtEntry.focus() root.mainloop()
And here is the result:
Now I’m getting somewhere! See the comments in the code for details on how and why I did what I did. This is pretty much the GUI I wanted. We have an entry box for a person’s name, a decidedly cool button to press to apply coolness to that person and a large box to display the result of the operation, including a warning in case the user is so carelessly uncool to attempt to apply coolness to someone who is already cool.
Next, of course, is the complicated part: getting the entry box, the button and the result box to all communicate with each other and the user to accomplish their noble function. Guess what — I haven’t learned in detail how to do that yet, so stay tuned!