Allgemeine GUI Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Hallo liebe Leute,
ich möchte ein bisschen Python3 lernen.

Python ist schon eine etwas gewöhnungsbedürftige Programmiersprache, wenn man sonst nur Basic und C - Ähnliche Programmiersprachen gewöhnt ist.

Kleine Kritik am Rande: :)
Die Formatierung mit den Tabs ist halt etwas gewöhnungsbedürftig.
Man bekommt schnell total unlesbaren Code, wenn die Textformatierung vom gewählten Editor nicht korrekt dargestellt wird.
Bei C/C++/Java finde ich die Syntax schöner und man bekommt für Editoren besser lesbaren Code.
Weil man an keinen Textumbruch, oder Tabulator gebunden ist.
Dafür muss man aber immer ein Semikolon schreiben.
Auch finde ich die Übersicht mit geschweiften Klammern besser, als einfach nur Leerstellen.

Aber ich will ja Python lernen und es nicht kritisieren.

Nun zum eigentlichen Thema:

Es gibt ja gaaanz viele tolle GUI-Frameworks. (GTK2/3+ , QT4/5, Win32 GUI, .Net Forms, Cocoa, Tkinter, ...)
Die zwei wichtigsten wären wohl GTK+ und QT (zumindest unter Linux).

Das Standard-GUI-Framework unter Python ist Tkinter und eigentlich ganz nett, aber es sieht eben teilweise einfach viel häßlicher als native GUI aus.
GTK+ oder QT sehen ja unter Linux ganz gut aus, weil diese dort Standard sind, aber unter Windows benötigt man dafür unglaublich viele Abhängigkeiten und bekommt eine GUI die nicht wirklich zum Windows/MacOS - Theme passt.

Nun meine Frage:
Gibt es ein Python-GUI-Framework was die native System-GUI unter Windows/Linux/Mac abstrahiert ?
Also unter Windows die normale Windows Api und unter Linux zum Beispiel GTK+ 2 oder GTK + 3 oder QT und unter MacOS zum Beispiel Cocoa.
Damit würde man unglaublich viele Abhängigkeiten einsparen und eine GUI im Design des Betriebssystems bekommen.

Gibt es so etwas ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Die meisten Leute die sowas wollen beissen in den sauren Qt-Apfel (weil das immer noch das Beste ist), oder schreiben ihre Oberflaeche halt zweimal. Insbesondere unter macOS besteht mit pyobjc ein wirklich guter Wrapper fuer die ganzen nativen Frameworks.

Und der Move, erstmal zu erklaeren, was man an einer Sprache alles schlecht findet - ziemlich smart! Damit sorgt man in der neuen Community in der man um Hilfe bittet immer gleich fuer gute Stimmung :roll:
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Danke für die Antwort.

Ich muss mich erstmal erstmal richtig mit den Grundlagen beschäftigen und da ist Tkinter (Auch wenn es häßlich ist) erstmal ganz nett.
Später werde ich mich dann wohl mit QT auseinandersetzen.

Dabei würde ich aber gerne mal den GUI-Editor Page nutzen, aber dieser startet nicht.
(Es kommt auch keine Fehlermeldung)

Welchen Python-Editor verwendet ihr eigentlich so ?

Ich nutze jetzt Geany.
Der Editor ist klein, schnell und funktioniert unter Windows, Linux, MacOs.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Schlaaaange: Welche Formatierung mit *Tabs*‽ Genau *die* verwendet man *nicht*. Konvention ist mit vier Leerzeichen pro Ebene einzurücken, was in keinem mir bekannten Texteditor zu unleserlichem Code führt. Leerzeichen genau aus dem Grund das Tabstopps nicht allgemeingültig definiert sind. Das Problem hat man doch in jeder anderen Programmiersprache auch‽

Letztlich macht man in Python genau das gleiche wie in C oder Java, nur eben ohne die geschweiften Klammern. Und auch dort orientieren sich die meisten Leser an der korrekten Einrückung und nicht an den Klammern. Python zwingt einen so zu schreiben das Codestruktur und Einrückung zusammen passen. Also diesen Aspekt betreffend lesbaren Code zu schreiben. Bei C und Java muss der Leser glauben/darauf vertrauen das die Einrückung der Codestruktur entspricht. Bei Python glaubt/vertraut auch der Compiler der Einrückung. Was auch den Leser sicherer macht.

Edit: Page ist grottenschlecht weil der echt gruseligen Code erzeugt. Gut wenn der nicht startet. ;-)

Ich verwende hautpsächlich Sublime Text und Vim.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Gibt es eigentlich einen guten GUI Editor für tkinter , der nicht nur unter Windows funktioniert?

Für GTk+ gibt es ja GLADE und für QT den QT Designer.

Gibt es da auch noch andere tolle GUI Designer, speziell für Python ?
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Ich glaube QT ist die beste Wahl.
Der QT Designer ist echt cool und man kann mit dem Tool ( pyuic5 ) das UI auch gleich in Pythoncode übersetzen.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schlaaaange: nein, man übersetzt keine ui-Dateien in Python-Code, sondern lädt die ui-Datei direkt.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Hä!
Aber man kann doch auch dieses Tool nutzen, oder?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann vieles. ZB ein Loch ins Knie bohren, und saure Milch reingiessen, wie mein Vater zu sagen pflegte. Deswegen ist ist das aber noch lange keine gute Idee.

Durch das laden zur Laufzeit umgeht man viele Probleme, wie zB den Code zu veraendern, oder das man vergessen hat, pyuic laufen zu lassen, nach einer Aenderung an der .ui-Datei. Oder das man sich falsche Muster angewoehnt wie man mit Qt arbeitet.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Da hast du nicht unrecht.
Kann mir jemand gute Tutorials oder/und ein Buch zu Python mit QT empfehlen?

Zur Zeit habe ich ein Grundlagen-Buch: ISBN 978-3-8362-4525-8
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ausser der offiziellen Dokumentation des Wrappers deiner Wahl (pyside oder pyqt) sind das meiste C++-Beispiele aus der offiziellen Doku, und die sollten sich mehr oder minder problemlos konvertieren lassen. Erst recht wenn man polyglot ist.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Wie beurteilt ihr eigentlich mit längerer Python-Erfahrung die Ausführgeschwindigkeit von Python-Scripts gegenüber Java-Programmen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Python laeuft deutlich langsamer. Das ist meistens vollkommen wurscht. Der Gewinn an Flexibilitaet und weniger Code-Zeilen wiegt das ueblicherweise auf. Und wir wissen ja alle, das man zur Laufzeit von Programm(teil)en einen Profiler ranzieht, weil Menschen notorisch schlecht darin sind, sowas intuitiv zu erfassen. Wenn was zu langsam ist, muss man sehen, was man da machen kann. ZB Cython benutzen. Oder eine C-DLL schreiben, und anbinden. Oder den hingehunzten O^3 Algorithmus etwas eindampfen.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Ich empfinde jetzt (nur nach objektiven Gefühl beurteilt) ein Python-Programm mit QT-GUI schneller und flüssiger, als ein Java-FX oder Swing - Programm.
So ein QT-Programm reagiert gefühlt min. doppelt so schnell auf GUI-Events als ein vergleichbares Java-GUI-Programm.
Aber das ist nur die GUI-Seite.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

"Nach objektivem Gefuehl" ist ein kleiner Widerspruch...

Qt ist in C++ geschrieben. Mit Python hat das also erstmal wenig zu tun, wenn das "fluffiger" ist. Und Swing war damals urst langsam und ist doch veraltet. Ich haette gedacht das SWT da eher ein Vergleich waere. JavaFX kenne ich nicht.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

__deets__ hat geschrieben: Sonntag 5. Januar 2020, 23:00 "Nach objektivem Gefuehl" ist ein kleiner Widerspruch...
:mrgreen:
Stimmt!

So unabhängig ist mein Gefühl dann auch wieder nicht.

Vom Prinzip greift Python dann auf Maschinencode-Optimierte-DLLs zurück.
Aber auch die Java-GUI nutzt doch C++ Dlls.
QT ist auch gefühlt etwas schneller im Eventhandling als GTK+.

Bei irgendwelchen Programmalgorithmen mit Python-Funktionen und Schleifen, Arrays, dynamische Listen, etc. sieht das Ganze wohl auch Ganz anders aus.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

...
Da ist Python wohl deutlich langsamer

Betrachten wir mal den Gaming-Szene und Grafikbereich.
(Also Betrachten wir mal SDL, OPENGL, OPENCV und GDK, Pango, Cairo, etc.)

Ich denke eine moderne GUI ist auch stark vom verwendeten Grafikchip abhängig.
Wie werden Bilder und Text gerendert, etc.

(JavaFx nutzt angeblich auch mehr die GPU.)

QT scheint mit OPENGL sehr gut zusammen zuarbeiten.

Bei Python hat man aber den freieren Zugriff, ohne unnötig hohe Abstraktion, auf die nativen Systembibliotheken.
Daher ziehe ich jetzt Python anstatt Java vor.
Schlaaaange
User
Beiträge: 34
Registriert: Sonntag 5. Januar 2020, 18:05

Bei einer Java-Anwendung merke ich quasi sofort wie beim Starten der Java-Anwendung der Computerlüfter hochdreht.
Antworten