python qt pyqt pyqt4 qdockwidget

python - ¿Cómo establecer QDockWidget tamaño inicial(predeterminado) en la aplicación sin widget central(PyQt4)?



(2)

Tengo una aplicación con muchos QDockWidgets y sin widget central. Quiero establecer algunos de esos QDockWidgets tamaño inicial (tamaño al inicio de la aplicación), pero no quiero limitar sus tamaños min / max.

¿Cómo hacerlo? Por ejemplo, necesito establecer el tamaño inicial 150x75 a uno de ellos. Intenté métodos obvios (como QWidget.Resize () relacionado con el contenido del widget de dock), pero no funcionó en absoluto.

Aquí hay un modelo simplificado de situación:

from PyQt4 import QtCore, QtGui app = QtGui.QApplication(['''']) mw = QtGui.QMainWindow() # mw = MainWindow mw.setCentralWidget(None) mw.showMaximized() mw.dockWdg1 = QtGui.QDockWidget(mw) mw.content1 = QtGui.QTreeWidget() mw.dockWdg1.setWidget(mw.content1) mw.addDockWidget(QtCore.Qt.DockWidgetArea(2), mw.dockWdg1) mw.dockWdg1.setWindowTitle("1st dock widget") mw.dockWdg2 = QtGui.QDockWidget(mw) mw.content2 = QtGui.QTreeWidget() mw.dockWdg2.setWidget(mw.content2) mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg2) mw.dockWdg2.setWindowTitle("2nd dock widget") mw.dockWdg3 = QtGui.QDockWidget(mw) mw.content3 = QtGui.QTreeWidget() mw.dockWdg3.setWidget(mw.content3) mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg3) mw.dockWdg3.setWindowTitle("3rd dock widget") mw.show() app.exec_()


Los dockwidgets se incorporarán en el diseño de la ventana principal, por lo que se ignorará cualquier intento de redimensionarlos.

La solución estándar para esto es crear una subclase del widget de contenido y sizeHint su sizeHint :

class TreeWidget(QtGui.QTreeWidget): def sizeHint(self): return QtCore.QSize(150, 75) mw.dockWdg2 = QtGui.QDockWidget(mw) mw.content2 = TreeWidget() mw.dockWdg2.setWidget(mw.content2)

Sin embargo, esto solo funcionará en la medida en que también administre cuidadosamente los tamaños de los otros dockwidgets. Y, por supuesto, la maximización de la ventana principal también tendrá un impacto en el resultado final.

También puede considerar usar QMainWindow.saveState y QMainWindow.restoreState para administrar el estado inicial de sus dockwidgets.


Use la función fixedSize, como setFixedWidth / setFixedHeight.