Qt code in Python einbinden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Ghostfighter6
User
Beiträge: 7
Registriert: Dienstag 12. September 2017, 07:02

Hallo,
bin neu im Forum, fange gerade mit Python und auch Qt an ...
Hintergrund :
Ich möchte ein bestehendes m-script (Matlab) umsetzen in Qt oder Python ... oder einen Mix, da ich was von PyQt las :)

Meine Frage :
Kann ich lediglich die xxxx.ui - also das reine Oberflächen-Design - per PyQt in Python einbinden oder auch bestehenden Qt-Quellcode??
Wollte eigentlich einen Großteil in Qt schreiben und nur einige Dinge über Python erledigen, wie große Excel-Tabelle verarbeiten, Öffnen fremder Programme, Erstellen einer XML aus den Excel-Daten, etc.

Wenn ich den Code aber nicht einbinden kann, überlege ich mir aber lieber alles in Qt zu schreiben, da Python mir sonst als interpretierte Sprache zu langsam sein könnte.

Außerdem tue ich mich als jahrelanger C-Programmierer mit Python echt schwer !!!! :D

Ghost
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ghostfighter6: was hast Du denn groß an Qt-Code? Gibt es sowas überhaupt? Du willst also die Sachen, die potentiell viel Rechenleistung brauchen (große Excel-Tabellen verarbeiten) in Python schreiben, weil Du glaubst, Python wäre zu langsam? Aber die GUI, die nicht rechenzeitintensiv ist, in C? Die üblichen Python-Implementationen sind alles Compiler. Was interpretiert wird, ist der Bytecode, der vom Compiler erzeugt wird. Wenn Du C-Programmierer bist, dann hast Du auch Probleme mit Qt, weil das eine besondere Form von C++ verwendet. Das ist ungefähr so, wie erst Spanisch und dann Italienisch zu lernen, man verwechselt immer die Vokabeln.

Python ist deshalb so beliebt, weil man deutlich effizienter programmieren kann, als mit C. In Deinem Fall würde ich Dir also entweder ganz C++ mi Qt oder ganz Python mit PyQt empfehlen. Mischen lohnt sich der Aufwand nur selten.
Ghostfighter6
User
Beiträge: 7
Registriert: Dienstag 12. September 2017, 07:02

Hi Sirius,

danke für die schnelle Antwort :)

Ich schließe aus deiner Antwort, dass man Qt-Quellcode ned in Python einbinden kann (hatte mir ein "bindung" so oder ähnlich eigentlich vorgestellt).

Ja,dann wäre es sinnvoller alles entweder in Qt oder Python zu implementieren.

Du meinst also, dass es keine spürbaren Laufzeitunterschiede zwischen Python und einer C++-basierten Srache gibt ??
Wenn dem so ist könnte ich natürlich auch Python einsetzen ....

Ghost
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann das schon. So funktioniert pyqt ja. Es benutzt ein extra dafür geschriebene Tool "SIP", welches C++ mit Python verheiratet. Unter besonderer Berücksichtigung von Qt und seinem Metamodell.

Es ist aber alles andere trivial und setzt Kenntnisse in allen drei Technologien voraus.

Und was die Geschwindigkeit angeht: für den hier in Frage kommenden Standardinterpreter ist Python nahezu immer langsamer als C++. Letzteres is dafür um eine Größenordnung schwieriger zu schreiben und dadurch auch weniger flexibel. Und es ist auch ein beliebter Fehler zu glauben man wüsste, wo die Performance hakt. Ausssr für wirklich triviales versagt die Intuition da üblicherweise.

Insofern würde ich, wenn du eh C++ noch nicht beherrschst durchaus Python ins Auge fassen. Es mag dir von C kommend schwerfallen, aber C++ ist schwerer. Viel. Auch wenn es aussieht und sich verhält wie C an vielen Stellen. Sobald es um OO gehts, hört das auf. Und du hast dann echt zu tun mit Speicherverwaltung etc.
Ghostfighter6
User
Beiträge: 7
Registriert: Dienstag 12. September 2017, 07:02

Danke auch an dich _deets_ :)

Ja, wo du es erwähnst ... SIP habe ich schon irgendwo gelesen ...
Ok, wenn es so schwierig ist, dann lasse ich vorerst mal besser die Finger davon ;)

Ja, mit der Geschwindigkeit habe ich da auch ein bissl Bedenken.
Erinnert mich irgendwie an Java und die Geschwindigkeitsproblematik ...

Naja, ich verstehe schon ein wenig von C++ und habe unter Borland und später Mikroschrott auch schon dies oder das gemacht und
Klassen, Methoden, Vererbung, usw. sind keine Fremdwörter, aber ich habe schon gesehen, dass Qt noch mal ne ganz andere Kiste ist !

Also noch eine Stimme für Python ... ok,das festigt meinen Entschluss .. kann das Ganze hinterher ja immer noch mal in Qt nachprogrammieren und schauen, wie die Unterschiede sind :D
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Ghostfighter6 hat geschrieben:Ich möchte ein bestehendes m-script (Matlab) umsetzen in Qt oder Python ... oder einen Mix, da ich was von PyQt las
Schau dir mal PyQt, Matplotlib und Spyder an.
PyQt ist eine Python Wrapper für Qt. Es ist so gut geworden, dass es fast keine Gründe mehr gibt Qt mit C++ zu programmieren.
Matplotlib ist ein in Python nachempfundenes Matlab, selbst die skurile subplot(211) Syntax wurde übernommen.
Spyder baut auf Matplotlib und PyQt auf, da ist die Matlab GUI mit Python nachprogrammiert worden.
a fool with a tool is still a fool, www.magben.de, YouTube
Ghostfighter6
User
Beiträge: 7
Registriert: Dienstag 12. September 2017, 07:02

Danke MagBen auch dir für die Info .... :)

Hatte in Qt das Ganze angefangen, dann abgebrochen und nur noch die GUI mittels PyQt in Python eingebunden und mit Python weitergemacht ...
Dann kam ich an den Punkt Messageboxen zu erzeugen ... da ich mit SIP oder sowas nicht auch noch beginnen wollte (will ja auch irgendwann mal fertig werden - lol :) .... entschied ich mich dann doch auf tkinter umzusteigen und die GUI nochmal neu aufzusetzen.
Hat zwar wesentlich länger gedauert als mit Qt, aber inzwischen steht sie fast.

Also ich wollte von Matlab weg und nicht eine Matlab-Emulation haben!
Ich möchte auch möglichst wenig Overhead und nicht noch andere Tools und Bindings mit dazu nehmen.
Ich denke mit Python/tkinter werde ich das gut hinbekommen.
Auch eine Anbindung an CANoe über das COM-Interface läüft schon zu größeren Teilen ... :)
Wollte ja erst mal verifizieren, ob ich das überhaupt irgendwie zum Laufen bekomme.
Der Rest ist dann Fleißarbeit ... wenn auch eine ganze Menge (über 5000 Zeilen m script) ....

Danke an alle - manchmal braucht man einfach mal einen Denkanstoß oder ein paar Stichworte ;)
Nette Community :)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Messageboxen haben doch mit SIP nix zu tun.... wenn du PyQt schon am laufen hattest, wuerde ich dabei bleiben. Tkinter ist demgegenueber *deutlich* limitierter, in jeder Form.
Ghostfighter6
User
Beiträge: 7
Registriert: Dienstag 12. September 2017, 07:02

Nabend __deets__,

habe überall nur das Einbinden der Qt-GUI in Python mittels PyQt gesehen ....
der Rest wurde dann in Python gemacht.

Damit benötigte ich dann aber eine andere Möglichkeit Messages und Dialoge zu erzeugen.
Ich habe viele Beispiele in tkinter gesehen und habe mich dann dazu entschlossen (Python als Lösung kam ja hier auch als Lösung positiv weg).
Da ich aber nicht mehrere Techniken/Tools mixen möchte, um das Ganze möglichst einfach zu halten, hatte ich dann alles in Python/tkinter erstellt.

Auch kamen mir die Möglichkeiten eine GUI mit Qt zu erstellen deutlich eingeschränkter vor als mit den Tools die früher benutzte - MS Visual Studio oder mein Lieblingstool aus vergangenen Tagen ... Borland C++ Builder mit der VCL :)

Nun noch das Binding mit SIP zu erlernen ... naja, wie gesagt ... ich möchte irgendwann auch fertig werden ;)

Bis jetzt habe ich mit tkinter alles wesentliche erstellen können - klar sind die möglichen Attribute eingeschränkt.
Es kommt aber eher auf die funktionale Umsetzung um und das sollte ich hinbekommen ;)

Dennoch vielen Dank für deine Ideen .... :)
Antworten