Browserbasierte GUI für eine Python-Anwendung [geschlossen]

8

Ich möchte eine web- / browserbasierte Benutzeroberfläche für eine Befehlszeilen-Python-Anwendung erstellen. Ziel ist es, HTML / JS-Technologien zu verwenden, um diese GUI zu erstellen. Als Anwendung selbst muss sie unter Linux und Windows ausgeführt werden, und auf die Benutzeroberfläche kann nur von localhost aus zugegriffen werden (nicht über das Internet zugänglich). Die GUI enthält 5 bis 10 Seiten.

Ich möchte keine herkömmliche Desktop-GUI, die HTML / JS enthält, sondern nur eine Reihe von HTML-Dateien und eine Art Controller zwischen diesen und der Anwendung.

Ich möchte auch die asynchrone Programmierung (Ajax-ähnlich) verwenden, damit ich Daten in die GUI laden und drucken kann, ohne die gesamte Seite zu aktualisieren. Ich würde wahrscheinlich jQuery dafür und für ein paar andere Dinge verwenden.

Wie würden Sie empfehlen, dies zu entwerfen? Leistung ist hier nicht der Schlüssel, ich schaue eher auf Zuverlässigkeit, Portabilität und Einfachheit.

Ich denke an die Verwendung eines leichten Python-HTTP-Servers / Frameworks (wie CherryPy ) und möglicherweise später eines Python-Template-Systems (am Anfang sind es nur ein paar Seiten).

BEARBEITEN:
Ich suche nach Ideen / Empfehlungen, wie dies erstellt werden kann, nicht nach Alternativen zur browser- / webbasierten Benutzeroberfläche.

ack__
quelle
2
Wenn es nur lokal ausgeführt werden soll, vereinfachen Sie das Ganze und schreiben Sie die GUI in Python.
Großmeister
3
Lassen Sie sich nicht von der Idee einschüchtern, eine Desktop-GUI zu erstellen. Ich finde Desktop-GUI viel einfacher zu erstellen als HTML-basierte Schnittstellen.
Großmeister
4
Obwohl ich der Meinung bin, dass sie starke Vorteile haben, möchte ich dies nicht erreichen. Und wie Sie sagen, Sie finden sie einfacher zu produzieren, aber das ist nicht mein Fall. Endlich verwende ich Javascript-Bibliotheken, die Dinge bereitstellen, die Sie in Python-GUI-Frameworks nicht finden.
ack__
2
Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie versucht haben und warum es Ihren Anforderungen nicht entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Fragen
Mücke
2
Auch hier geht es nicht darum, eingeschüchtert zu werden. Ich habe in der Vergangenheit viele Desktop-GUI mit Gtk, nCurses, WinForms, .Net entwickelt und sogar eine GUI in x86-Assembler mit Radasm erstellt . Es ist nur so, dass es hier nicht meinen Bedürfnissen entspricht.
ack__

Antworten:

5

Ich versuche gerade, so ziemlich das Gleiche zu tun. Es sieht so aus, als hätte Python einen Server ( SimpleHTTPServer ), also versuche ich, eine AngularJS-Webanwendung zu erstellen, die mit dem Python-Server interagiert.

Möglicherweise gibt es ein Cefpython- Projekt, mit dem Python-Anwendungen als eigenständige Programme verteilt werden können.

Eugene
quelle
Ich habe hier auf SO negative Kommentare zu SimpleHTTPServer gesehen. Ich würde vorschlagen, nach einem anderen Server zu suchen (ich werde mich wahrscheinlich für CherryPy entscheiden, aber es sind viele andere verfügbar). Haben Sie CEFPython ausprobiert? Ich fürchte, es bietet nicht die aktuellsten Chromium-Funktionen, aber ich könnte mich irren. Die Verwendung eines echten Browsers garantiert eine echte Unterstützung, Wartung und aktive Entwicklung.
ack__
@ack__ Ich spiele derzeit mit SimpleHTTPServer. Ich glaube, es gibt keine Probleme, wenn Sie nur einen Einzelsitzungsserver benötigen. Ich versuche, nur mit den Mitarbeitern aus der Standardbibliothek auszukommen, um die Installation auf den Systemen der Benutzer zu vereinfachen. Ich bin noch nicht an einem Punkt angelangt, an dem ich Cefpython benötige - aber es sollte möglich sein, CEF dort bei Bedarf zu aktualisieren.
Eugene
Ok, und welche CEF-Version haben Sie verwendet? Ich bin nicht besorgt über den Multi-Prozess-Teil, sondern über die Unterschiede zwischen der Webkit-API und der Chromium-Content-API, falls vorhanden.
ack__
Sie können einfach Binärdateien von ihrer Site abrufen. Sie haben eine CEFClient-App, mit der Sie Ihre Anwendung festlegen können. Ich habe auch einige CEF-basierte Produkte gesehen, obwohl sie node.js verwenden - github.com/adobe/brackets-shell und github.com/rogerwang/node-webkit . Brackets-Shell führt Node in einem separaten Prozess aus, während Node-Webkit (das letzte Mal, als ich es überprüft habe) diesen In-Process ausführte. Ich frage mich, wie schwer es wäre, den Knoten durch eine Python-App zu ersetzen.
Eugene
3

Ihre angegebenen Kriterien sind:

  • Verlässlichkeit
  • Portabilität
  • Einfachheit

In diesem Fall ist eine Desktop-App der richtige Weg. Es ist nicht erforderlich, einen Webserver in den Mix zu werfen. Das wird die Sache nur komplizieren, ohne dass es tatsächlich zu einem Gewinn kommt.

Basierend auf der Bearbeitung des OP - dass eine HTML-basierte Schnittstelle gewünscht wird - könnte eine mögliche Route ein Node-Webkit sein . Auf diese Weise können Sie eine Desktop-Anwendung erstellen, die unter Windows, Linux und Mac mit HTML und Javascript ausgeführt wird. Es wird ein ähnlicher Ansatz wie bei PhoneGap verfolgt (mit der Ausnahme, dass auf allen Plattformen derselbe eingebettete Browser verwendet wird). Der Knoten wird zur Stromversorgung von Javascript verwendet, das den Zugriff auf eine große Anzahl von Bibliotheken ermöglicht. Sie haben Zugriff auf das zugrunde liegende System, sodass Sie das Python-basierte Befehlszeilenprogramm ausführen können.

GroßmeisterB
quelle
2
Ich würde behaupten, sie wären einfach, nicht einfacher. Es wird nicht zuverlässiger sein, weil er mit Pytk überhaupt nicht so vertraut ist. Er hat nie etwas über die Kommandozeile gesagt. An einem lokalen Server ist WENIGER nichts Portables. Wenn er zum Beispiel seine eigenen Steuerelemente erstellt, wird es viel schwieriger sein, mit einer Anwendungs-GUI zu entwickeln.
BeardedO
Sie erhalten viele Vorteile, wenn Sie unsere Benutzeroberfläche in HTML ausführen. Deshalb unterstützen Steam, Spotify und andere das Chromium Embedded Framework. Adobe Brackets ist ein interessantes Beispiel: Node.js wird neben dem CEF-UI-Prozess als separater Prozess ausgeführt.
Eugene
Ja, der Hauptvorteil ist die Flexibilität. Sie haben beispielsweise viel weniger Widerstand gegen die Entwicklung neuer Steuerelemente, reaktiver Layouts und dynamischer Seitenlayouts.
BeardedO
3
Nur zur Verdeutlichung: Wenn Sie die Benutzeroberfläche in HTML ausführen, erhalten Sie eine plattformübergreifende, moderne Benutzeroberfläche mit stark optimierter Unterstützung für das Rendern von Schriftarten, GPU-beschleunigte Übergänge usw. Es gibt eine große Anzahl gut gepflegter Bibliotheken und Frameworks, Tools und dergleichen. Ein irritierendes Problem bei der Benutzeroberfläche in Java ist beispielsweise die Unterstützung von Retina Macs. Kein solches Problem beim Ausführen in Browsern.
Eugene
1
GrandmasterB Ich sage nicht, dass Sie nicht das tun können, was der Browser tut. Du kannst. Aber Browser haben es bereits implementiert und stark optimiert (der Wettbewerb ist dort hart).
Eugene
2

Optionen für Python-Webanwendungen:

  • Django
  • web.py.
  • werkzeug (ohne flasche)
  • verdrehte
  • cherry.py
  • rohes wsgi
  • raw simplehttpserver

Jeder von diesen wird funktionieren. Soweit Sie eine App erstellen; Die meisten dieser Frameworks verfügen über Online-Tutorials. Folgen Sie einfach und passen Sie es an Ihre Bedürfnisse an.

tylerl
quelle