Anderes Programm starten und zurückkehren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Guten Abend,
Ich versuche zur Zeit mit Python die Navisoftware navit zu starten.
Ich möchte erreichen das das Navitfenster im vordergrund angezeigt wird.
Des Weiteren suche ich eine möglichkeit von navit aus wieder zu meinem Python fenster zurück zu kehren.
BlackJack

@SteveDee: Soweit ich mich erinnere kann man Navit in die eigene GUI integrieren. Ich glaube das ging irgendwie mit Umgebungsvariablen.
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Ist das auch bei Pygame machbar und wenn ja, erstelle ich dann ein Surface dafür oder wie ist das umzusetzen?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Es scheint als gäbe es einen OpenGL Driver. laut Forum sollte man den 'enablen' können. Ich hab allerdings mal kurz den Code überflogen, es sieht so aus als könnte man den OpenGL treiber nicht mit eigenem Code sehr einfach integrieren. Theoretisch sollte es möglich sein den Treiber so umzubauen, dass das ganze in einen Framebuffer geschrieben wird, den du dann als Textur anzeigen könntest, das setzt aber vorraus das du OpenGL und C beherrscht.

An deiner stelle würde ich das Ganze mit Qt machen (je nachdem was du machen willst, dazu hast du ja nicht wirklich viel gesagt).
the more they change the more they stay the same
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Ich hab eigenlich nur vor Navit in ein Programm einzubinden, damit ich dann z.B. zurück zu meiner Musikfunktion wechseln kann, da das Lied wechseln und dann wieder zur Navigation zurückkehren.

C Kentnisse habe ich etwas aper OpenGL so gar nicht.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

SteveDee hat geschrieben:Ich hab eigenlich nur vor Navit in ein Programm einzubinden, damit ich dann z.B. zurück zu meiner Musikfunktion wechseln kann, da das Lied wechseln und dann wieder zur Navigation zurückkehren.
Warum dann PyGame, das sollte mit Qt auch gehen.
the more they change the more they stay the same
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Ich werd mich mal mit Qt befassen, danke für die Hilfe :)
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Also ich bin jetzt so weit das Navit in meiner Anwendung mit Qt angezeigt wird.
Jedoch friert die Anwendung ein so bald ich irgendwo hin klicke.
Muss ich irgendwie noch erlauben das ich das eingebundene kontrollieren kann oder woran kann das liegen?

Code: Alles auswählen

# ...
    app = QtGui.QApplication(sys.argv)
    menu = QtGui.QWidget()
    menu.resize(800,480)

    container = QtGui.QX11EmbedContainer(menu)
    container.resize(800,480)
    container.show()
    winId = container.winId()
    os.environ["NAVIT_XID"] = str(winId)
    print(str(winId))
    process = QtCore.QProcess(container)
    process.start("navit")

    menu.show()
Edit: Es scheint wohl zu reagieren, braucht aber eine Minute oder so, kann man dem Process mehr Resourcen zuweisen, oder gibt es andere Möglichkeiten um das zu beschleunigen?
Zuletzt geändert von Anonymous am Sonntag 17. Januar 2016, 18:26, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Könnte an Qt.Process liegen, du solltest dafür besser das subprocess Modul verwenden: `navit_process = Popen([...], ...)`
the more they change the more they stay the same
BlackJack

Das kann ich nicht nachvollziehen. Weder bei `QProcess` noch bei `subproces.Popen` habe ich irgendwelche Warte- oder Denkzeiten beim Programm.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import os
import sys
from subprocess import Popen
from PyQt4 import QtGui


def main():
    application = QtGui.QApplication(sys.argv)
    navit_window = QtGui.QX11EmbedContainer()
    navit_window.resize(800, 480)
    os.environ['NAVIT_XID'] = str(navit_window.winId())
    _navit_process = Popen(['navit'])
    navit_window.show()
    sys.exit(application.exec_())


if __name__ == '__main__':
    main()
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Mit dem Code hat es funktioniert.

Vielen Dank :)
Antworten