With the completion of this chapter, we now have a fully graphical version of a game which was previously playable only over the command line. We have identified the key decisions to make before porting the interface of a command-line application over to a graphical one.
The benefits of making programs follow a reusable, class-based data structure have been made clear during the upgrading of our interface, allowing for a lot of code reuse between the previous chapter and this one.
We have learned about the drawing abilities of Tkinter's Canvas widget—we practiced drawing natively via lines and polygons, as well as inserting an image file at certain coordinates.
More detailed controls of the pack geometry manager have been shown, including the use of pack_propagate(0) to keep a Frame at its defined size and pack_forget to replace widgets with others.
While impressive...