Große GUI Projekte mit C# oder Python

toma123

Cadet 3rd Year
Dabei seit
Apr. 2020
Beiträge
63
Ab wann lohnt es sich GUI-Projekte mit C#, anstatt von Python zu schreiben? Gibt es da eine Grenze an die man bei komplexen Gui's mit Python scheitern kann? Vorweg zu sagen, ich beherrsche noch keine der beiden Sprachen und denke bei meiner ersten Anwendung an eine welche unter Windows genutzt wird.


Angenommen ich brauche ein Tool, welche die Auflösung des Monitors verändert. Dies würde ich als Tool einstufen. Lohnt es sich hier C# herzunehmen? Ab wann würde es sich lohnen?

Gibt es vielleicht Beispiele für "große" Python Programme?
 

DaysShadow

Rear Admiral
Dabei seit
Jan. 2009
Beiträge
5.453
Willst du das Programm weitergeben und ist es spezifisch für Windows? Dann nimm C#. So sehr ich Python auch mag, ist das Verteilen fertiger lauffähiger Programme m.W. immer noch ein Graus.

Python GUI Programme kenne ich generell eher in der Linux Umgebung, aber die meisten sind kleine Tools. Eines der größeren Programme, in dem Fall ein Spiel, das in großem Maße Python nutzt ist z.B. EVE Online.
 

emilov

Cadet 4th Year
Dabei seit
Jan. 2020
Beiträge
123
Pythons Qt Bindings, PyQt oder PySide sind ziemlich solide. Und mit Qt hast Du ein Framework, was für (sogar platformunabhängige) GUIs bestens tauglich ist.
 

madmax2010

Commodore
Dabei seit
Juni 2018
Beiträge
4.432
heutzutage geht immer mehr in die Richtugn, die GUI einfach in einem browser laufen zu lassen. Unter Python bietet sich da Django / Flask an. Das ist schön betriebssystemunabhängig :)

Wenn du eine Native GUI unter Windows haben willst, numm ruhig C# :)
Ergänzung ()

Pythons Qt Bindings, PyQt oder PySide sind ziemlich solide.
+1

nur blos Finger weg von wx.
 

toma123

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Apr. 2020
Beiträge
63
Und wie verhält es sich mit der Weitergabe? Was passiert, wenn ich ein Python Programm weitergeben will, wo Python aber nicht installiert ist? Kann man es als *.exe verpacken, dass es da lauffähig ist?
 

madmax2010

Commodore
Dabei seit
Juni 2018
Beiträge
4.432
Bei c# programmen muss .net / mono installiert sein
bei python programmen python
bei java programmen mindestens java runtime
bei javascript ein browser
Es braucht immer eine laufzeitumgebung.

du kannst aber immer einen setup packen, der alles nötige abgekapselt mitbringt
 

toma123

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Apr. 2020
Beiträge
63
OK, aber Windows und das Net Framework sind ja meist schon installiert.
Das Problem ist, das die Tools am Ende auf Rechnen laufen sollen, wo der Nutzer keine Adminrechte hat und es auch nicht gestattet ist Pyhton noch zusätzlich zu installieren.

Mein Kollege schreibt in Delphi und legt einfach eine *.exe auf dem System ab, welche gleich ausführbar ist ohne noch zusätzliches zu installieren
 

DaysShadow

Rear Admiral
Dabei seit
Jan. 2009
Beiträge
5.453
@madmax2010 C# Programme sind am Ende als .exe vorliegend, Java Programme als lauffähige .jar und beide können per Doppelklick gestartet werden. Für Python hingegen...tja. Du lieferst Source Code aus. Die Laufzeitumgebung ist hier gar nicht das Problem.

@toma123 Dann nimm C# und hab eine Sorge weniger. Ich schrieb ja schon oben etwas zur Weitergabe, aber nunja.
 

madmax2010

Commodore
Dabei seit
Juni 2018
Beiträge
4.432
nicht ganz korrekt. Ja, C# Programme werden als .exe compiled, werden jedoch gegen .net libst gelinkt. Wenn diese nicht auf dem Zielsystem in einer kompatiblen version liegen, laufen die nicht.

Das Selbe gillt für java. ein .jar ist nur ein Archiv, welches die class files enthält. Ohne eine kompatible jre -> nicht lauffähig.

Anders herum, lassen sich auch unter python "kompilierte" fassungen der programme erstellen -> Siehe .pyc. Auch hier gilt wieder was gerade zu Java und C# gesagt wurde.

Deinem hinweis an @toma123 schließe ich mich gern nochmal an - C# wird am schmerzfreisten sein. Vor allem da inzwischen .net auf windows immer installiert ist und man nur sehr selten in Kompatibilitätsprobleme läuft.
(Ich hatte hier dieses Jahr nur 1x Probleme, da epic eine paar deprecated .net 3 libs ein wenig zu lange verwendet hat :D
 

marcOcram

Lieutenant
Dabei seit
Mai 2010
Beiträge
540
@madmax2010 Das stimmt nicht mehr ganz. Bei .NET Core sowie Java ist es mittlerweile möglich (evtl. sogar üblich), dass die Laufzeitumgebung (benötigte Bibliotheken) einfach mit ausgeliefert wird (hat natürlich seine Nachteile wie fehlende Sicherheitsupdates). So muss auf dem Zielrechner nichts installiert sein. Bei .NET Core kann man das sogar alles in eine *.exe packen (https://docs.microsoft.com/en-us/dotnet/core/deploying/#publish-self-contained). Dann heißt es nur noch Doppelklick und starten.

@toma123 Ich würde auch C# nehmen. Wenn dir die Auslieferung als eine einzige ausführbare Datei wichtig ist, kannst du auch probieren .NET Core zusammen mit WPF (oder WinForms) zu nutzen oder .NET Core als WebServer mit Oberfläche im Browser wie @madmax2010 schon sagte.
 

BeBur

Lt. Commander
Dabei seit
Nov. 2018
Beiträge
1.760
Installer / Exe-Datei aus Python/Qt Projekt geht meines Wissens nach. Einfacher und in jedem Fall unholprig wird das jedoch gewiss bei C# sein.

Wo genau die Schmerzgrenze liegt bzw. ob es eine gibt (also bei Python) kann ich leider nicht sagen. Generell sollte sich "einfach" der Interpreter (+ggf. libraries) mit ausliefern lassen, unsichtbar für den Nutzer.
 

mercury

Lieutenant
Dabei seit
Jan. 2009
Beiträge
559
Meine Erfahrung mit Python und PyInstaller zum "Freezen":

Die GUI hab ich in Qt mit QtDesigner gemacht und als .ui File in Python eingebunden. kein Gefrickel mit der Oberfläche also (von Layouts manchmal abgesehen).
Zusätzlich neben PyQt5 in Verwendung an "großen" Modulen: matplotlib, pandas, sowie deren Abhängigkeiten (zB numpy)

Ich hab das Tool für Kollegen gemacht, und rolle es als gefreezte Variante in nem zip File aus. die brauchen nur mehr entpacken und auf die exe klicken.

Pros:
  • Pyinstaller ist ziemlich zuverlässig, ich hatte bis dato keine Probleme, und ich verwende eigentlich nur das standardsetup (pyinstaller myapp.py -w -noupx btw^^) . hatte bis dato keinen Bedarf irgendwelche hooks setzen zu müssen oder was auch immer. Einzige sache war mal , in einem py File von Pandas musste ich was manuell ändern, damit es gefreezt auch funktioniert. war aber leicht behoben. Wenn man virtuelle Environments verwendet, braucht man das eh nur einmal machen.
  • es gibt für python und alles angrenzende genug Docs, Tutorials oder Threads auf Stackoverflow, bis dato hab ich aber alles manchmal schneller, manchmal später gefunden.
  • abhängig von der Anwendung, muss man halt evtl sein Glück probieren (cx_freeze war zB ein Krampf).

Cons:
- Abhängig von deinen verwendeten Modulen kann das fertige Programm (entweder mit -onefile in einer 500mb exe oder mit mehrern subfoldern) kann das Ding RIESIG (und ich schreib bewusst caps) werden. mit o.a. Modulen bin ich gleich mal bei 700mb. weil du alles an Runtime-Environment mitliefern musst was benötigt wird.
bei uns in der Firma kein Showstopper, aber schön ist es nicht - mal so gesagt. v.a. weil wir eben alle Windowsrechner haben.

Ich hab das desegen so gemacht, da ich Python bereits kannte und es daher ein aufgelegter Elfer war sozusagen. Wenn ich ohnehin bei 0 anfangen würd, würd ich es evtl. auch in C# oder was auch immer machen. Ich weiß aber halt nicht, ob das je nach Anwendungsgebiet halt auch von Vorteil ist. ich muss viel mit numerischen Daten machen, da ist halt Pandas der erste Gedanke bei sowas.
 
Top