Here's a quick summary of things we covered in this chapter.
We started by learning how to structure the Tkinter program as classes and objects.
We then decided the data structure for our program. This enabled us to set the ground for writing the rest of the program logic, maintaining a clean separation between data, logic, and its visual representation. We saw the vital benefits of deciding the data structure in advance.
We also worked with more Tkinter widgets such as Spinbox, Button, Entry, and Checkbutton. We also saw the grid geometry manager in action in the chapter.
We then saw how to bind widgets to higher-order functions using command callbacks. This is a very common technique used in GUI programming.
We then understood multithreaded programming in the context of Tkinter. We moved the audio playback onto a separate thread. This enabled us to keep the audio...