Seite 1 von 1

QStackedWidget als Navigation

Verfasst: Montag 29. Februar 2016, 14:56
von SteveDee
Hallo,
ich habe folgenden Code, habe jedoch Probleme den Index vom QStackedWidget zu ändern, weil er die Variable nicht kennt.
WIe kann ich das Problem lösen und ist der Code so überhaupt richtig?

Code: Alles auswählen

#!/usr/bin/python

import sys
import os
from PySide import QtCore
from PySide import QtGui

mainWindow = 0
app = 0
    
class MusicWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MusicWidget, self).__init__(parent)
        QtGui.QLabel("Hallo Welt", self)


class HomeWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(HomeWidget, self).__init__(parent)
        button = ImageButton(QtGui.QPixmap("images/music.png"),self)
        button.setGeometry(71,83,125,169)
        button.clicked.connect(self.startMusicMenu)

    def startMusicMenu(self):
        self.parent.stack.setCurrentIndex(1)
        

class MainMenu(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainMenu, self).__init__(parent)

        self.setGeometry(40,40,800,480)
        self.setWindowTitle("Testfenster")
        self.setWindowIcon(QtGui.QIcon("images/favicon.gif"))

        background = ImageButton(QtGui.QPixmap("images/background.png"), self)
        background.setGeometry(0,0,800,480)

        self.stack = QtGui.QStackedWidget()
        
        home = HomeWidget()
        self.stack.addWidget(home)

        music = MusicWidget()
        self.stack.addWidget(music)

        self.stack.setCurrentWidget(home)
        self.setCentralWidget(self.stack)
        self.show()
        
class ImageButton(QtGui.QAbstractButton):
    def __init__(self, pixmap, parent=None):
        super(ImageButton, self).__init__(parent)
        self.pixmap = pixmap

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.drawPixmap(event.rect(), self.pixmap)

    def sizeHint(self):
        return self.pixmap.size()
    

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    mainWindow = MainMenu()
    sys.exit(app.exec_())

Re: QStackedWidget als Navigation

Verfasst: Montag 29. Februar 2016, 15:18
von BlackJack
@SteveDee: Welche Variable? Was für eine Ausnahme bekommst Du? Wie sieht der Traceback aus? Liest den Text der Ausnahme mal ganz genau, was ist da von welchem Typ und von welchem Wert versuchst Du ein Attribut zu bekommen?

Re: QStackedWidget als Navigation

Verfasst: Montag 29. Februar 2016, 19:16
von jerch
@SteveDee:
Ich tippe mal auf die Zeile mit `self.parent.stack.setCurrentIndex(1)` - da fehlen zum einen die Klammern an parent (ist eine Methode), zum anderen dürfte das `.stack` zuviel sein, da das QStackedWidget das neue Parent wird, wenn man Widgets hinzufügt. Mit `self.parent().setCurrentIndex(1)` dürfte es gehen, wobei die magische Zahl eins da komisch ist und Du vllt. eher mit QWidget-Referenzen arbeiten solltest.

Re: QStackedWidget als Navigation

Verfasst: Donnerstag 3. März 2016, 19:20
von SteveDee
Vielen Dank, das hat mir sehr weiter geholfen.
Jetzt habe ich noch eine weitere Frage, ich möchte gerne Navit in das QStackedWidget einbinden, jedoch bekomme ich es nicht zu sehen.

Code: Alles auswählen

navit = QtGui.QX11EmbedContainer()
        navit.resize(800,480)
        os.environ["NAVIT_XID"] = str(navit.winId())
        process = QtCore.QProcess(navit)
        process.start("navit")
        self.stack.addWidget(navit)

Code: Alles auswählen

def startNavi(self):
        self.parent().setCurrentIndex(2)
Was mache ich falsch?