PyQt: Unterfenster dauerhaft im Vordergrund

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
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
max2

Also dann für die Suchmaschine:

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