1. Brak testów. W przyszłości ktoś kto będzie chciał (albo z konieczności będzie zmuszony) utrzymywać aplikacje, zastosuje mnożnik do wyceny usługi.
2. Brak należytej modularyzacji. Nawet na poziomie warstw (np. warstwa logiki kalkulatora i jego prezentacji).
3. Pierwsze czego szukałem to:
if __name__ == '__main__':
.. nie ma, już wiem że będzie ciekawie....
4. 1 klasa Stack... co ma ten stos czego nie ma zwykła... lista?
5. Przy klasach budujących GUI, praktykuje się dziedziczenie z Frame lub innego okna/widgetu. Wtedy dostęp do elementów nie jest rozbudowany przez self.coś.gdzieś.komujś. Poza tym wygląd warto wyprowadzić do oddzielnego kontenera a nie "dziergać tu i ówdzie w kodzie".
5. Narzędzie pep8 (tu masz online: http://pep8online.com/ ) zgłasza zastrzeżenia.
6. Ja bym ostrzegał że konwersja waluty wymaga dostępu do sieci.
7. Połączenie mnożników i jednostek, proponuję zrobić w jednym kontenerze a nie rozbijać na osobne. Łatwiej to utrzymać i znaleźć błąd.
8. Jawne złamanie DRY. Wszystkie konwertery mają taki sam kod a jedynie różnią się zestawem jednostek.
9. ~1200 linii... naprawdę? Miejże litość...
10. Brak łatwej instalacji. Może zipapp, może jeszcze inaczej.. ale nie tak ..