Arbeiten mit QMdiArea:
Code: Alles auswählen
# Die Importe dienen nur zu Testzwecken. Mir ist klar, dass man nur das
# importieren soll, was man auch tatsächlich braucht
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Mdi_Main(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.mdiArea = QMdiArea()
self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setCentralWidget(self.mdiArea)
self.actionTestWindow.triggered.connect(self.createMdiChild)
def createMdiChild(self):
self.check_window = Check_Window(self)
self.check_window.setAttribute(Qt.WA_DeleteOnClose)
self.check_window.pushButtonCancel.clicked.connect(self.close_it)
self.subwindow = QMdiSubWindow()
self.subwindow.setWidget(self.check_window)
self.mdiArea.addSubWindow(self.subwindow)
self.check_window.show()
self.subwindow.show()
self.subwindow.widget().show()
def close_it(self):
self.mdiArea.removeSubWindow(self.subwindow)
Das heißt, ich brauche eine QMdiSubWindow -Klasse, damit ich am Ende das Fenster auch schließen kann.Removes widget from the MDI area. The widget must be either a QMdiSubWindow or a widget that is the internal widget of a subwindow. Note widget is never actually deleted by QMdiArea. If a QMdiSubWindow is passed in its parent is set to 0 and it is removed, but if an internal widget is passed in the child widget is set to 0 but the QMdiSubWindow is not removed.
Jetzt schaue ich mir mal QWorkspace an:
Arbeiten mit QWorkspace :
Code: Alles auswählen
# Die Importe dienen nur zu Testzwecken. Mir ist klar, dass man nur das
# importieren soll, was man auch tatsächlich braucht
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Mdi_Main(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.workspace = QWorkspace()
self.workspace.setScrollBarsEnabled(True)
self.setCentralWidget(self.workspace)
self.actionTestWindow.triggered.connect(self.createMdiChild)
def createMdiChild(self):
self.check_window = Check_Window(self)
self.check_window.setAttribute(Qt.WA_DeleteOnClose)
self.check_window.pushButtonCancel.clicked.connect(self.close_it)
self.workspace.addWindow(self.check_window)
self.check_window.show()
def close_it(self):
self.check_window.close()
Wenn ich mir die beiden Möglichkeiten anschaue, einmal das Arbeiten mit MdiArea und dann mit QWorkspace, dann fällt doch deutlich auf, dass im QWorkspace erheblich weniger Code nötig ist, allein für das Öffnen des Unterfenster. Mal davon abgesehen, dass auf in Qt-Dokumentation ausdrücklich behauptet wird, dass diese Klasse angeblich veraltet sei, frage ich mich, wieso ich auf MdiArea umsteigen sollte, wenn es doch so umständlich ist? Dagegen ist das Arbeiten mit QWorkspace wesentlich angenehmer. Oder aber ich habe im Code was gewaltig falsch gemacht. Ich will ja auch keine Grundsatz Diskussion starten, aber ich sitze hier und rolle mit den Augen und frage mich, wieso das so umständlich sein muss? Und allgemein, welchen Nachteil hätte ich, wenn ich QWorkspace weiterhin benutze? Ich meine, die Klasse funktioniert ja bisher anstandslos. Mal abgesehen davon, dass mit dem Objektbaum innerhalb des QWorkspace-Widgets. Vielleicht mag mir da wer mehr Licht ins Dunkle bringen, außer mit der Aussage "Aber ind er Qt-Dokumentation steht doch, dass ist veraltet....". Lesen kann ich ja selbst
