Ein paar Anmerkungen:
Klassennamen sollten mit einem Grossbuchstaben beginnen.
Widgets sollten sich in ihrer `__init__()` nicht selbst `pack()`\en, das machen die Standardwidgets auch nicht. So nimmt man sich die Freiheit das neue Widget in andere ein zu betten.
Innerhalb eines Widgets darf man keine Layout-Manager "mischen", also entweder nur `pack()`, nur `grid()` oder nur `place()`. Wobei man `place()` gar nicht benutzen sollte. Es gibt Ausnahmen, aber die sind sehr selten und nicht für langweilige normale GUIs.
Das Hauptfenster sollte immer eine `Tkinter.Tk()`-Instanz sein. Darauf, das so eine automatisch erzeugt wird, kann man sich nicht verlassen.
Du musst nicht *alles* an das Objekt binden, nur die Sachen auf die man auch aus anderen Methoden noch zugreifen muss.
Die `config()`-Sachen kann man in der Regel auch direkt im Konstruktoraufruf angeben. Also zum Beispiel ``Entry(self, width=60)``.
Um Buttons mit Aktionen zu verbinden benutzt man das `command`-Argument und keine direkte Bindung der Maustaste an die Aktion. Sonst verhalten sich Buttons nicht immer so wie der Benutzer das erwartet.
Für das Zeitproblem gibt's das `time`-Modul. Du musst Dir einfach die Zeit vor dem Aufruf und die danach merken und die Differenz ausgeben.