Another aspect of OO design you might find helpful would be to separate purely UI (or purely GUI) logic from "back-end" processing logic. For example, if you have a module (or a few) to implement a set of methods for audio file manipulation, those methods could be invoked by either a command-line style app or a windowing app -- these two UI approaches could (perhaps should?) be separate scripts, but they both invoke the same set of processing methods for audio data, which simply means that they both use the same processing module(s).
in reply to Eliminating conditional code for GUI and text-mode operation
As ikegami indicated above, one and/or the other UI approach could make use of functions that are available only for that particular UI, but since these are UI differences, they would have no impact on the back-end data processing module(s).