Seite 1 von 1

Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 12:25
von Haragius
Hallo zusammen,

ich versuche ein Stapellayout zwecks Übungen zu verwenden. Das funktioniert auch nur erhalte ich einen Schönheitsfehler.
Wenn ich das Programm starte, blizt für einige Millisekunden ein Fesnster auf bevor sich das eigentliche UI zeigt.
Könnte es daran liegen, dass das Stapellayout nicht das Hauptlayout ist?

PS: Ich habe den code auf das Stapellayout reduziert mit den Label's zur kontrolle um ein Beispiel mit dem Problem zu geben....

Code: Alles auswählen

from PyQt4 import QtGui
import sys

class mainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(QtGui.QMainWindow, self).__init__(parent)
        self.createMenu()
        self.createComponents()
        self.createLayouts()
        self.resize(400,400)

    def createMenu(self):
        pass

    def createComponents(self):
        self.btnNavi1 = QtGui.QPushButton("Seite1")
        self.btnNavi2 = QtGui.QPushButton("Seite2")
        self.btnNavi3 = QtGui.QPushButton("Seite3")
        self.label1 = QtGui.QLabel("1")
        self.label2 = QtGui.QLabel("2")
        self.label3 = QtGui.QLabel("3")
        self.seite1 = QtGui.QWidget()
        self.seite2 = QtGui.QWidget()
        self.seite3 = QtGui.QWidget()

    def createLayouts(self):
        layout_l1v = QtGui.QVBoxLayout()
        
        layout_l2h_Navi = QtGui.QHBoxLayout()
        layout_l2h_Navi.addWidget(self.btnNavi1)
        layout_l2h_Navi.addWidget(self.btnNavi2)
        layout_l2h_Navi.addWidget(self.btnNavi3)

        layout_l2s_Seiten = QtGui.QStackedLayout()
        layout_l2s_Seiten.addWidget(self.seite1)
        layout_l2s_Seiten.addWidget(self.seite2)
        layout_l2s_Seiten.addWidget(self.seite3)
        
        layout_seite1 = QtGui.QHBoxLayout()
        layout_seite1.addWidget(self.label1)
        
        layout_seite2 = QtGui.QHBoxLayout()
        layout_seite2.addWidget(self.label2)
        
        layout_seite3 = QtGui.QHBoxLayout()
        layout_seite3.addWidget(self.label3)

        self.seite1.setLayout(layout_seite1)
        self.seite2.setLayout(layout_seite2)
        self.seite3.setLayout(layout_seite3)
        
        layout_l1v.addLayout(layout_l2h_Navi)
        layout_l1v.addLayout(layout_l2s_Seiten)
        
        widgetZentral = QtGui.QWidget()
        widgetZentral.setLayout(layout_l1v)
        self.setCentralWidget(widgetZentral)
        
        self.btnNavi1.clicked.connect(lambda: layout_l2s_Seiten.setCurrentIndex(0))
        self.btnNavi2.clicked.connect(lambda: layout_l2s_Seiten.setCurrentIndex(1))
        self.btnNavi3.clicked.connect(lambda: layout_l2s_Seiten.setCurrentIndex(2))


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = mainWindow()
    window.show()
    sys.exit(app.exec())

Re: Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 14:15
von snafu
Mal abgesehen davon, dass du dir vielleicht mal Listen und Schleifen ansehen solltest, um deinen Code zu verbessern, kann ich den von dir beschriebenen Fehler nicht nachvollziehen: Es erscheint einfach nur ein Fenster mit 3 nebeneinander gesetzten Buttons. Ich kann hier keinerlei unerwünschte Effekte feststellen. Meine Wahrnehmung lässt allerdings im ganz niedrigen Millisekunden-Bereich etwas nach. :(

Unter welchem Betriebssystem und welcher grafischen Oberfläche läuft das Ganze denn?

Re: Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 14:40
von Haragius
Hmm eigenartig. Ich sehen das Fenster unter Gentoo mit Kde 4.10.3 und Windows7

Ich weis nun um welches Fenster es sich handelt nur eine Lösung habe ich noch keine.
Wen man nun die Zeile

Code: Alles auswählen

layout_l1v.addLayout(layout_l2s_Seiten)
auskommentiert bleibt das Fenster sichtbar und siehe da, es sind die definierten Seiten des Stapellayouts.
Aber warum sehe ich das Fenster kurz aufflackern wen die Zeile nicht auskommentiert ist?

Re: Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 16:53
von lunar
@Haragius Du erzeugst alle Layouts und Steuerelemente ohne Angabe eines Vater-Steuerelements. Mithin hält Qt diese für unabhängige Steuerelemente, und gönnt ihnen ein eigenes Fenster.

Merke: Qt-Objekten immer ein "parent" mitgeben, im Regelfall das Fenster oder das Container-Element, in welchem die Steuerelemente dann angezeigt werden sollen.

Re: Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 16:58
von Haragius
Das klingt sehr plausibel. Gleich mal umsetzen. Danke

Re: Verhalten Stapellayout

Verfasst: Sonntag 11. August 2013, 22:58
von Haragius
Danke euch beiden!

Das aufflackern des Stapellayouts ist weg und der Code ist nurnoch halb so lang.