QStackedWidget als Navigation

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

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_())
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?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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.
SteveDee
User
Beiträge: 20
Registriert: Mittwoch 30. Dezember 2015, 01:58

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?
Antworten