Seite 1 von 1

PyQt: Unterfenster dauerhaft im Vordergrund

Verfasst: Mittwoch 1. Dezember 2004, 14:08
von max2
Hallo,

ich möchte mit PyQt ein Unterfenster öffnen, welches im Vordergrund bleibt und die Bedienelemente des aufrufenden Fensters blockiert. Kleines Beispiel:

parent.py:

Code: Alles auswählen

import sys
from qt import *
from child import Child

class Parent(QMainWindow):
    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.statusBar()
        if not name:
            self.setName("parent")
        self.setCaption("parent")
        self.setCentralWidget(QWidget(self,"qt_central_widget"))
        self.startButton = QPushButton(self.centralWidget(),"startButton")
        self.startButton.setGeometry(QRect(50,50,151,41))
        self.startButton.setText("Start !")
        self.resize(QSize(243,178).expandedTo(self.minimumSizeHint()))
         self.connect(self.startButton,SIGNAL("released()"),self.startChildWindow)
    def startChildWindow(self):
        c = Child()
        c.show()
        c.exec_loop()       #  Fehlermeldung :(
          
if __name__ == "__main__":
    app = QApplication(sys.argv)
    QObject.connect(app,SIGNAL("lastWindowClosed()"),app,SLOT("quit()"))
    p = Parent()
    app.setMainWidget(p)
    p.show()
    app.exec_loop()
child.py:

Code: Alles auswählen

from qt import *

class Child(QWidget):
    def __init__(self,parent = None,name = None,fl = 0):
        QWidget.__init__(self,parent,name,fl)
        if not name:
            self.setName("child")
        self.setCaption("child")
        self.textLabel1 = QLabel(self,"textLabel1")
        self.textLabel1.setGeometry(QRect(150,30,135,61))
        self.textLabel1.setText("<h2>Wirklich?</h2>")
        self.CancelButton = QPushButton(self,"CancelButton")
        self.CancelButton.setGeometry(QRect(20,130,151,41))
        self.CancelButton.setText("Cancel")
        self.textLabel1.setText("<h2>Wirklich?</h2>")
        self.OkayButton = QPushButton(self,"OkayButton")
        self.OkayButton.setGeometry(QRect(230,130,151,41))
        self.OkayButton.setText("Okay")
        self.resize(QSize(413,234).expandedTo(self.minimumSizeHint()))
        self.connect(self.OkayButton,SIGNAL("released()"),self.doOkay)
        self.connect(self.CancelButton,SIGNAL("released()"),self.close)

    def doOkay(self):
        print "Starte ..."
Das Unterfenster wird zwar aufgerufen, aber das Parent-Fenster bleibt bedienbar. Außerdem gibt es eine Fehlermeldung: "AttributeError: exec_loop", ohne diesen Aufruf wird jedoch nichts angezeigt. Wie macht man es also richtig? Oder wird das Unterfenster garnicht von QWidget abgeleitet? Danke im voraus für alle Hinweise.

Grüße
max

Lösung ...

Verfasst: Montag 6. Dezember 2004, 16:05
von max2
Also dann für die Suchmaschine:

Unterfenster von QDialog ableiten und nach self.setModal(1) bleibt es "oben".