Seite 1 von 1
Ist Python für das Einbetten der grafischen Ausgabe ....
Verfasst: Donnerstag 2. Oktober 2014, 22:05
von RobertP
... einer Anwendung geeignet?
Hallo Forum,
ich bin völlig neu hier.
Ich möchte auf einem RaspberryPi ein Navi/Audioplayer fürs Auto realisieren. Dazu bin ich ein paar Möglichkeiten durchgegangen, in deren Folge ich es für wahrscheinlich halte, das ganze mit Python zu realisieren. Eigentlich wollte ich C nehmen, weil ich in C schon recht viel gemacht habe, das hier (die grafische Ausgabe) scheint mein Können wohl leider deutlich zu übersteigen. Zumindest habe ich den GTK+-Kram nicht begriffen.
Aber das ist nicht meine Frage. Das schon:
Ist Python dafür geeignet, die grafsiche Ausgabe eines Fensters in einen Rahmen zu stecken und da eine Anwendung drumherumzustricken?
Die Anwendung soll Navit sein, und außerhalb des Rahmens soll ein Audioplayer und noch etwas Firlefanz dargestellt werden. Gesteuert wird das ganze von des Tasten eines Werksnavis.
Geht das? Wenn ja, in welche GUI muss ich mich einarbeiten?
Ich danke euch.
Re: Ist Python für das Einbetten der grafischen Ausgabe ....
Verfasst: Donnerstag 2. Oktober 2014, 23:02
von BlackJack
@RobertP: Was hast Du denn bei Gtk+ nicht verstanden? Die APIs zu den diversen GUI-Toolkits werden in den Python-Anbinungen recht direkt abgebildet. Man muss die API an sich also schon verstehen. Python hat eine etwas nettere Syntax, keinen Compilerzyklus, und man muss sich deutlich weniger mit Speicherverwaltung beschäftigen, das sind aber eigentlich eher Kleinigkeiten die sich auf die Produktivität auswirken — die Konzepte der GUI-Toolkits sind die gleichen wie in den jeweiligen Sprachen in denen die Toolkits selber geschrieben wurden.
An sich sollte Python geeignet sein. Wichtig an der Stelle ist allerdings auch das Navit geeignet ist und es vorsieht das man das Fenster in andere GUIs einbettet.
Welche GUI ist wohl Geschmackssache solange sie es erlaubt andere Fenster einzubinden. Für Qt und Gtk gibt es im Navit-Wiki Beispiele die sich sehr wahrscheinlich auch auf die Python-Anbindungen übertragen lassen.
Re: Ist Python für das Einbetten der grafischen Ausgabe ....
Verfasst: Donnerstag 2. Oktober 2014, 23:22
von RobertP
BlackJack hat geschrieben:Was hast Du denn bei Gtk+ nicht verstanden?
Ich fürchte, die Komplexität der GUI - und schon der Beispiele in den Tutorials - hat mich schlicht überrannt. Ein (unter Win) funktionierendes C-Programm in eine (Linux) GTK+-GUI zu überführen, hat schonmal nicht geklappt.
BlackJack hat geschrieben:An sich sollte Python geeignet sein. Wichtig an der Stelle ist allerdings auch das Navit geeignet ist und es vorsieht das man das Fenster in andere GUIs einbettet. ... Für Qt und Gtk gibt es im Navit-Wiki Beispiele die sich sehr wahrscheinlich auch auf die Python-Anbindungen übertragen lassen.
Das stimmt mich hoffnungsvoll. Die GTK+-Einbettung habe ich - natürlich - nicht verstanden, bei Qt sieht das Beispiel "besser" aus.
Ich komme aus der 8bit-AVR-Welt. :K Eine GUI, die nicht Punkt für Punkt von Hand gemalt ist, habe ich noch nicht selbst* erstellt.
Re: Ist Python für das Einbetten der grafischen Ausgabe ....
Verfasst: Sonntag 16. November 2014, 20:31
von RobertP
Ich habe navit jetzt erfolgreich in eine PyQt-Gui eingebettet.
Code: Alles auswählen
import sys
import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class embedNavit(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(0,0,320,234)
self.process = QProcess(self)
self.navit = QX11EmbedContainer(self)
wId = self.navit.winId()
os.putenv('NAVIT_XID',str(wId))
layout = QVBoxLayout(self)
layout.addWidget(self.navit)
#self.addWidget(self.navit)
self.process.start('navit')
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embedNavit()
main.show()
sys.exit(app.exec_())
Allerdings ist navit damit absolut unperformant und das System (Raspbian) lässt sich nur noch per ssh runter fahren. Die CPU-Last und die Speicherauslastung sind deutlich unter maximum. Wie kann ich das Problem lösen? Ein bisschen Musik soll der Pi ja neben dem navit auch noch spielen.