QX11EmbedContainer mit Navit in QStackedWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Guten Tag,
ich versuche der Zeit Navit, welches durch einen QX11EmbedContainer eingebunden wird in einem QStackedWidget anzuzeigen.
Leider sieht man überhaupt nichts und wenn man das Programm beendet kommt die Meldung (QProcess: Destroyed while process is still running).
Folgenden Code habe ich dazu verwendet:

Code: Alles auswählen

navit_window = QtGui.QX11EmbedContainer()
        navit_window.resize(800, 480)
        os.environ['NAVIT_XID'] = str(navit_window.winId())
        process = QtCore.QProcess(navit_window)
        process.start("navit")
        navitPage = self.stack.addWidget(navit_window)
Das ändern des aktuellen Widgets funktioniert auch, nur leider sehe ich dann nur mein Hintergrundbild und nichts von Navit....
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Code: Alles auswählen

class NaviWidget(QtGui.QX11EmbedContainer):
    def __init__(self, parent=None):
        super(NaviWidget, self).__init__(parent)
        
        navit_window = QtGui.QX11EmbedContainer(self)
        navit_window.resize(800, 440)#480
        navit_window.
        os.environ['NAVIT_XID'] = str(navit_window.winId())
        print(str(navit_window.winId()))
        global process
        process = Popen(['navit'])
So bekomme ich jetzt das Navit Fenster eingebettet, jedoch freezt die ganze Anwendung und ich kann sie nur noch killen.
Jemand eine Idee woran das liegen kann?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@SteveDee:
Hmm, ich habe versucht, das Ganze mit PyQt als auch mittels Qt in C++ nachzuspielen. Jedesmal hängt sich der ganze Spass auf, während es z.B. mit xterm problemlos funktioniert. Ich vermute einen Bug in navit und dessen mouse event handling. Hab es aus Zeitgründen nicht weiter verfolgt, als Ansatz könntest Du z.B. mal debuggen, wie navit auf X11-Ebene die Maus bzw. deren Fokus behandelt.
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Also ich habe jetzt herausgefunden, das so bald der EmbedContainer ein QWidget als parent hat, zwar angezeigt wird aber dann das Programm freezt.
Wird jedoch nur der Container angezeigt geht alles.
In meinem Programm in Verbindung mit dem QStackedWidget wird jedoch bei beiden Fällen kein Container angezeigt.
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

Code: Alles auswählen

def main():
    application = QtGui.QApplication(sys.argv)
    win = QtGui.QWidget()
    win.resize(800,480)

    container = QtGui.QX11EmbedContainer(win)
    container.resize(800,480)
    container.show()
    
    os.environ['NAVIT_XID'] = str(container.winId())
    print(str(container.winId()))

    process = QtCore.QProcess(container)
    process.start("navit")

    win.show()
        
    sys.exit(application.exec_())   

if __name__ == '__main__':
    main()
Habe ein bisschen rumprobiert und dieser Code zeigt den Container an, freezt jedoch die Anwendung.
Wenn ich das QWidget weglasse, geht es jedoch aber das bring mir nichts.
Wie kann es denn sein das der EmbedContainer nicht mehr richtig funktioniert so bald es ein parent Element gibt?
Antworten