Technologiewahl für Desktop-App (Mac/Win) mit komplexer UI – Python/Qt sinnvoll oder Alternativen.

Das C++ in Qt ist aber was vollkommen anderes als "Vanilla" C++. Es hat eigene Klassen für wirklich alles, z.B. sowohl QString, QList, QSet usw., als auch Klassen für Hardware und andere Themen wie Bluetooth, Netzwerk, SQL-Datenbanken usw.
Die offizielle(!) Dokumentation dieser Klassen ist absolut hervorragend. Es werden immer Code-Beispiele geliefert, an denen man sich orientieren kann. Sowas habe ich bei keiner anderen Technogie jemals erlebt. Sonst muss man rumgoogeln, Stack Overflow, oder neuerdings KI fragen.

Es ist zwar schon so, dass es auch unter Qt sprachliche Konstrukte wie "new" und "delete" gibt. Und es kann auch nicht schaden, die Grundlagen über Pointer verstanden zu haben. Aber normalerweise ist es nicht nötig, das auf einem Niveau zu machen, wie es die wirklichen C++-Cracks machen.

Ich würde das C++ in Qt eher mit Java oder C# vergleichen als mit "echtem" C++.
 
  • Gefällt mir
Reaktionen: BeBur und Schwachkopp
Persönlich würde ich ja eher zu Webtechnologien tendieren: Kanban, Kalender usw. sind bestimmt dort einfacher zu realisieren. Eine Tauri-App fühlt sich auch um einiges schneller an, als z.B. Python+Qt.

Möchte aber auch erwähnen, dass Qt bekannt gegeben hat, das sie mit Qt-Bridges in Zukunft mehr Sprachen unterstützten, z.B.: Rust, C#, Java und Swift.
 
CyborgBeta schrieb:
Don't reinvent the wheel.
Das hier fand ich zu dem Thema ganz interessant... ist mal ne andere Perspektive:
https://endler.dev/2025/reinvent-the-wheel/


Ich finds selbst doof, dass ich das sage, aber ich würde Java und / oder Kotlin nehmen. Ist für Cross-Platform-User-Interface-Kram das flexibelste, das du nehmen kannst. Für Android, Windows und macOS haste damit gar keinen Stress, für iOS willste ja sowieso Swift nehmen. Unter Linux kriegeste das damit vermutlich auch zum Laufen.

Alternativ kannste dich mal bei Flutter umschauen. Das hat dann ne gewisse Lernkurve, ist aber auch cross-platform.

Von C# Lösungen rate ich momentan ab. Hier gibts insbesondere bei nativer Integration aktuell noch größere Probleme (Drag & Drop, Audio, Secure-Storage, etc.). Die Probleme gibts bei Flutter teilweise auch, aber deutlich weniger nervig.

Tauri ist nett, aber wie du schon sagtest ist das für native Controls etwas eingeschränkt.
 
sandreas schrieb:
Unter Linux kriegeste das damit vermutlich auch zum Laufen.
Nicht nur vermutlich. Java ist plattformunabhängig.

... Aber, wie gesagt, eigentlich Reinventing the wheel, also ein Anti-Pattern.

Und jetzt bitte ... der übliche Java-Hass von allen in 3 2 1...
 
Also ich programmiere meine Radio App z.B. in Python und PyQt und kann nur sagen: Erstens ist Python für komplexere Applikationen (und auch generell :D) ein Graus und zweitens kommt man evtl. doch an den Punkt wo man sehr systemspezifische Funktionen aufruft und da ist es dann mit der Plattformunabhängigkeit vorbei oder schwierig.
 
  • Gefällt mir
Reaktionen: CyborgBeta
CyborgBeta schrieb:
Und jetzt bitte ... der übliche Java-Hass von allen in 3 2 1...
Java ist halt grundsolide und man kann damit eigentlich alles machen was es zu machen gibt, für viel ist es eben nicht genug Hippster :)
 
  • Gefällt mir
Reaktionen: CyborgBeta
User38 schrieb:
Java ist halt grundsolide und man kann damit eigentlich alles machen was es zu machen gibt,
Außer ressourcenschonende Software schreiben ;-)
Gibt's für Java eigentlich WinUI3 Unterstützung?
 
  • Gefällt mir
Reaktionen: jb_alvarado
Drahminedum schrieb:
Was mich am meisten stört, liegt aber in der Natur der Sache ist die dynamische Typisierung, also man kann eher sagen, ich habe generell eine Abneigung gegen dynamisch typisierte Sprachen, viele Fehler Fehler fallen halt erst zur Runtime auf, die ein Compiler sonst schon zur Compilezeit aufdecken würde, man muss sich ja nur im Variablennamen einmal vertippen...

Objektorientierung ist grausam umgesetzt, nur ein Konstruktor, jedes Member geht in ein Dictionary, auch dort kannst Du unentdeckt was hinzufügen bei Tippfehlern. Singletons sind weird umzusetzen und von Metaclasses fang ich gar nicht erst an.

Einfache JSonSerialisierung ist auch mega umständlich, sobald Du Klassen serialisieren willst.

Keine Events, wenn Du sowas wie Events brauchst geht das nur über Callbacks.

Eine Exception in einem Thread, die nicht gefangen wird, killt nur den Thread und nicht den ganzen Prozess, selbst wenn der Main Thread gekillt wird läuft der Prozess noch weiter. Auch kann man einen Thread von außen nicht beenden.

Ein Wust an Magic Functions (magic sagt schon alles, das will ich in der Programmierung gar nicht haben :D) und unerwarteten Verhaltensweisen, z.B:
foo = Bar()
und
with foo = Bar()
dank magic function enter kann foo im zweiten Fall ein anderer Typ als Bar sein, es muss nicht das Bar Objekt sein was gerade erzeugt wurde...

Die ersten beiden Sachen kann man durch massives testen natürlich etwas mitigieren, aber ich finde das Sprachdesign einfach grausam, es ist mir ein großes Rätsel wie sich das jemals so verbreiten konnte. Aber ich denke das Für und Wider kann man auch zu genüge nachlesen. Problem bei solchen Sprachen ist immer, dass sie auf den ersten Blick leicht zu lernen erscheinen, aber man ganz schnell knietief in der Sch... steht, sobald der Code umfangreicher wird. :D

Meine erste Sprache die ich gelernt habe war PHP, ich dachte immer Python wär das bessere PHP, aber es ist genauso grausam. Sprachen wie C#, Java oder was auch immer sind einfach wesentlich robuster und einfacher nachzuvollziehen, sobald der Code umfangreicher wird. Aber klar dort kann man auch viel Müll produzieren...
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Arc Angeling, Drahminedum, BeBur und 4 andere
Drexel schrieb:
Was mich am meisten stört, liegt aber in der Natur der Sache ist die dynamische Typisierung
Ich bin auch ein Fan von statisch typisierten Sprachen, muss aber sagen, dass ich bei Ruby (on Rails) nie (soweit ich mich erinnere) auf ernsthafte Probleme gestoßen bin. Vielleicht ist Backend dahingehend einfach etwas dankbarer. Ich hatte aber im Nachhinein den Eindruck, wenn man sauber programmiert ist der Typ eine Variablen zu jedem Zeitpunkt ziemlich offensichtlich und da geht daher eigentlich nichts schief. Wird vermutlich anders, wenn man anfängt, stark von duck-typing oder anderen gruseligen Dingen Gebrauch zu machen.

Drexel schrieb:
ich finde das Sprachdesign einfach grausam
Ich auch. Scopes sind ja auch ziemlich verkackt bei Python. Zum Glück brauche ich meist nur kleine Skripte, die lasse ich mitlerweile zu größeren Teilen von einem LLM schreiben.

Drexel schrieb:
es ist mir ein großes Rätsel wie sich das jemals so verbreiten konnte
Das liegt soweit ich weiß an CPython und der C-API. Aufgrund dieser wurde (C)Python insbesondere von Google für einschlägige Frameworks verwendet. Diese waren für Bereiche, die sehr mit Anfängern überlaufen wurden (erst Data Science, dann KI). In der Kombination hat Python dann sehr viel Momentum aufgebaut, sodass es nun ein umfassendes Ökosystem gibt, welches Python heute tatsächlich oft zu einer sinnvollen Wahl macht.

Drexel schrieb:
Meine erste Sprache die ich gelernt habe war PHP, ich dachte immer Python wär das bessere PHP, aber es ist genauso grausam.
Angeblich sollen neuere Sprachversionen von PHP ziemlich gut sein. Habe PHP selber aber nie verwendet.
 
  • Gefällt mir
Reaktionen: CyborgBeta und andy_m4
Ich denke eher, dass es massiv von Google gepusht wurde, warum auch immer, auch das YouTube Frontend ist meines Wissens nach in Python realisiert. Witzigerweise arbeitet der Hauptentwickler mittlerweile bei Microsoft, der war eigentlich schon in Rente und sie haben ihn wieder zurückgeholt, es scheint noch nicht vermurkst genug. :D

Das gruseligste habe ich oben übrigens vergessen und das ist die Doku. Das ist die schlechteste Doku die ich jemals zu einer Programmiersprache gefunden habe. Methodensignaturen sind nie vollständig ersichtlich, den Rückgabewert musst Du grundsätzlich im Fließtext suchen. Wie fast alles oder in Codewschnipseln. Pro Modul eine feste Struktur nach losen Funktion, Klassen und deren Methoden gibt es kaum. Und generell ist es sprachlich und strukturell nicht einheitlich. Oder Versuch mal den Konstruktor von Exception zu finden. Und eine Erläuterung dazu, für was das args array verwendet wird. Für sowas grundsätzliches habe ich fast eine Stunde Recherche gebraucht....


TimmyDuese schrieb:
Mein großes Problem hier: Ich habe einen hartnäckigen "faden Beigeschmack" / ein starkes Unbehagen, Python für GUI-Programmierung zu nutzen. Ich kann nicht genau festmachen, woran es liegt, aber es fühlt sich nicht "richtig" an für die UI, obwohl ich mit Python an sich (für Dienste, Skripte) kein Problem habe.
Das habe ich auch erst so gesehen, das geht aber tatsächlich erstaunlich gut.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CyborgBeta
BeBur schrieb:
ich mitlerweile zu größeren Teilen von einem LLM schreiben.
Das ist die zentrale Frage heutzutage. Also gar nicht, ob es optimal geeignet ist oder nicht oder ob man es beherrscht oder nicht, sondern: Ob es genug Material im Internet dazu gibt, das die LLMs inhaliert haben, damit man damit seinen Kram "vibe-coden" kann. :-)
 
  • Gefällt mir
Reaktionen: CyborgBeta
Drexel schrieb:
Das gruseligste habe ich oben übrigens vergessen und das ist die Doku. Das ist die schlechteste Doku die ich jemals zu einer Programmiersprache gefunden habe. Methodensignaturen sind nie vollständig ersichtlich, den Rückgabewert musst Du grundsätzlich im Fließtext suchen. Wir fast alles oder in Codewchnipseln. Pro Modul eine feste Struktur nach losen Funktion, Klassen und deren Methoden gibt es kaum. Und generell ist es sprachlich und strukturell nicht einheitlich. Oder Versuch mal den Konstruktor von Exception zu finden. Und eine Erläuterung dazu, für was das args array verwendet wird. Für sowas grundsätzliches habe ich fast eine Stunde Recherche gebraucht...
Das kann ich nur unterstreichen ... das geht zum Teil mit der schwachen Typisierung einher, aber auch Klassen, Methoden und globale Variablen, oder allgemein die Datenkapselung und Ausnahmebehandlungen sind ein Graus. Hinzu kommt noch, dass ich zum Beispiel bei (primitiven) Datentypen immer den gleichen Datenbereich haben möchte (feste Länge), das ärgert mich auch bei JS und allen JS-verwandten Sprachen. Außerdem will ich eindeutige Operatoren, Operanden und Präzedenzen haben, und für Kontrollstrukturen möchte ich auch nicht x Varianten haben, aber leider ist Python überladen mit syntaktischem Zucker. Hinzu kommt die nicht gegebene Abwärtskompatibilität zwischen Python 2 und 3 - nein, ich möchte nicht alles umstellen müssen, sobald es eine neue Python Version gibt. Und dann noch die Spezialfälle, also Zeichenkettenmanipulationen oder die Array-Handhabung. Tja, und zu guter Letzt noch die undurchsichtigen on-board Datenstrukturen. Für mich ist Python nicht abgerundet, und deshalb nehme ich, wenn es nicht zu hardwarenah wird, lieber Java - obwohl man durchaus zum Beispiel auch Spiele in Java entwickeln kann, siehe Richtung Minecraft.
 
Zurück
Oben