Einbinden von PyQt Widgets in web2py

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Ingeborg
User
Beiträge: 5
Registriert: Dienstag 16. Juli 2013, 01:58

Moin!

Ich versuche gerade eine in Qt4 geschriebene Anwendung in eine WebAnwendung um zu coden. Bevor ich mir die Mühe mache, wollte ich fragen ob überhaupt jemand schon einmal versucht hat Qt4/PyQt GUIs in web2py unterzubringen?

Gruß inge!
Benutzeravatar
Manchotix
User
Beiträge: 54
Registriert: Samstag 14. Januar 2012, 19:54

Hallo Ingeborg und willkommen im Forum,

für mich sind Gui Anwendungen und Web Anwendungen 2 verschiedene Paar Schuhe.
Es ist jetzt die Frage was du da überhaupt Portieren möchtest, da die Idee sicherlich übertragbar ist aber bestimmt nicht der Code.
Wäre mal schön zu wissen was du genau vor hast.

mfg Manchotix
- Über Fehler sollte man sich freuen als über das richtige Ergebnis denn wir Menschen können nur aus den Fehlern lernen-
BlackJack

@Ingeborg: Desktop-GUI-Anwendungen lassen sich nicht so einfach ins Web bringen. Wenn es sauber programmiert ist, also GUI und Programmlogik ordentlich getrennt ist, sollte man zwar eigentlich die GUI relativ leicht austauschen können, allerdings ist die Webserver/Browser-Verbindung doch etwas anders als die direkte Verbindung zwischen Programmlogik und GUI-Toolkit im selben Prozess. Die Kommunikation passiert dort mit einem Anfrage/Antwort-Modell, welches vom Browser getrieben wird. Der muss also immer anfragen ob er etwas an der Ansicht verändern soll. (Es gibt zwar so moderne Sachen wie Websockets & Co, aber damit schränkt man den Benutzerkreis ein, weil das nicht jeder Browser kann.)

Wenn die Programmlogik isoliert vorliegt, könnte man sich an eine Umsetzung als Webanwendung machen. Ob und wie sich das in web2py realisieren lässt, kann ich allerdings mangels Erfahrung mit web2py nicht sagen und es hängt sicher auch davon ab, ob die Umsetzung der Programmlogik sich einfach in das Rahmenwerk einsetzen lässt.
Ingeborg
User
Beiträge: 5
Registriert: Dienstag 16. Juli 2013, 01:58

Danke, ihr macht mir Mut,

Qt4 Anwendungen basieren nicht selten auf Qt Designer Formularklassen. Diese Klassen beinhalten ein Drag&Drop DesignerFormular indem die Widgets zusammen geklickt werden. In den zugehörigen Source und Header Files (C++) werden dann die Workflows abgearbeitet und die Kommunikation mit den GUI Parts über das Qt-eigene Signal-Slot-System verarbeitet und vorgenommen.

Ich möchte eine C++ Applikation in Python umhacken um es webfähig zu machen. Ein wenig mit Python programmiert habe ich schon und bin mit den wichtigsten Konzepten vertraut. Es ist ja auch nicht weiter schwer, vor allem wenn man schon andere Sprachen kennt. Gebürtig bin ich aus der C -Ecke, hab mit Matlab programmiert und habe lange Zeit die C++ Schiene gefahren und wollte nun in die Webprogrammierung reinschauen, da ich meine C++ Applikationen einem breiten Publikum zugänglich machen möchte. Web2py habe ich als Webframework genommen, da es mir empfohlen wurde und auch schon recht weit rein gestiegen bin, sprich viel gelesen, videos geschaut etc.

Mein nächstes Ziel ist es ein Qt Widget im Browser angezeigt zu bekommen, quasi es in ein View einzufügen und Funktionalitäten über die Controller laufen zu lassen.

Ich bräuchte eine kleine Starthilfe und hoffe sie in dem Anzeigen eines Qt Widgets (PyQt) in einem Browser zu finden. Ich hab mich ein wenig daran festgebissen, doch fehlen mir hier halt noch viele Vorkenntnisse.

Ich wäre über jede Hilfe dankbar.

Grüße!
Inge
BlackJack

@Ingeborg: Du kannst keine Qt-Widgets im Browser darstellen. Browser können HTML, CSS, und JavaScript. Damit schreibt man bei Webanwendungen den Teil der beim Client läuft. Wenn dann nicht einmal die Programmlogik in Python ist, kannst Du von Deinem Programm nichts wiederverwenden, denn dann müsstest Du die Programmlogik ja auch in Python neu implementieren, wenn Du web2py auf der Serverseite einsetzen möchtest. Es sei denn, Du kannst von Deinem Qt-C++-Programm die Logik in C++ als Webservice, also zum Beispiel als JSON-RPC API, bereit stellen. In dem Falle könnte man vielleicht auch Python weg lassen und die Anwendung komplett aus JavaScript und Webservice in C++ erstellen.
Ingeborg
User
Beiträge: 5
Registriert: Dienstag 16. Juli 2013, 01:58

Wie ich schon schrieb werden die Programme in Python umgewandelt und für WebAnwendungen angepasst . Mittels PyQt ist es ohne weiteres möglich die GUI Files .ui in Python Scripte umzuwandeln. Diese versuche ich gerade in web2py in einem Browser zum laufen und sichtbar zu machen. Ist dieses wirklich nicht möglich?

Ich weiß, dass dieses viel Arbeit erfordert, aber ich brauche einen Einstieg.

Vielen Dank schon einmal,
Inge
BlackJack

@Ingeborg: Nein, es ist nicht möglich Qt-Widgets im Browser anzuzeigen! Das ist eine komplett andere Architektur. Wie gesagt, Browser können HTML, CSS, und JavaScript. Damit erstellt man die Benutzeroberfläche von Webanwendungen. Es gibt da diverse Rahmenwerke die helfen UIs zu erstellen, aber eben nichts was automatisch eine Qt-UI in diese Webtechnologien übersetzt. Geh' davon aus, dass Du die Benutzeroberfläche mit Web-Mitteln neu schreiben musst. Und das in einer Webserver/Browser-Kombination nicht alles so funktionieren wird wie bei „nativen” GUI-Elementen wo Programmlogik und UI im gleichen Prozess läuft und nahezu beliebig interagieren kann. Benutzer eines Webbrowsers haben teilweise auch andere Erwartungen von der „Bedienung” von Webseiten als sie das von lokalen Anwendungen haben.

Python-Quelltext aus den ``*.ui``-Dateien zu erstellen ist übrigens keine zeitgemässe Vorgehensweise. Man kann die ``*.ui``-Dateien mittels `PyQt4.uic`-Modul zur Laufzeit laden und sich so den Zwischenschritt mit generiertem Quelltext komplett sparen.
Ingeborg
User
Beiträge: 5
Registriert: Dienstag 16. Juli 2013, 01:58

Vielen Dank, das werde ich dann wohl ad acta legen, aber auch das wird mich weiterbringen.

Welche WebWidgetsTools machen denn Sinn? Im Kern bin ich auf ein OpenCV basiertes Videostreaming angewiesen und ein auf Anfrage öffnendes Fenster zur Veränderung mittels Slidern.

Vielen Dank,
Inge
BlackJack

@Ingeborg: Slider sollte eigentlich jedes UI-Rahmenwerk haben. Selbst jQueryUI hat die, und das ist eher mickrig. Kann OpenCV denn Videos in einem passenden Format über das Netz streamen? Und dann ist auch die Frage wie man das im Browser abspielen möchte. Über ein Flash-Plugin und/oder dem HTML5-Video-Tag.

Ich habe so ein bisschen den Eindruck Dir sind immer noch nicht die Möglichkeiten beziehungsweise Einschränkungen von einer Webanwendung klar.
Ingeborg
User
Beiträge: 5
Registriert: Dienstag 16. Juli 2013, 01:58

Ja du hast recht. Aber eigentlich ist es logisch dass, das nicht gehen kann. In einem anderen Forum sagte man mir, dass es wohl ginge und ich auf meine heißgeliebten Widgets nicht verzichten müsste, aber das war wohl falsch.

Ich werde wohl die Applikationsanwendung in Python umcoden und als Plattform unabhängige Applikation zum Download freigeben. Dazu werde ich die Video- und Bildausgabe über WebWidgets realisieren und eine abgespeckte Demoform basteln. Das ganze Programm darauf um zu konfigurieren wäre wohl eine Monatsaufgabe, denn es müsste von klein auf neu auf Webwidgets designed und umgebastelt werden. Die Demoversion würde schon ewig brauchen.

Zum codieren von Videos nutzt OpenCV FFMpeg. Ich weiß nicht, ob man dazu einen Umweg basteln kann um dies dann in einem HTML5 VideoTag zum laufen bringen kann. Ich würde mich gerne dazu auf Python festlegen, einfach um meinen Horizont an Sprachen zu erweitern. Soweit ich weiß gibt es auch Pythonwrapper für FFMpeg.

Wie stehen dazu die Chancen?

Danke für die kleine Ernüchterung,

Grüße!
Inge
Antworten