如何在没有中央窗口小部件(PyQt4)的应用程序中设置QDockWidget初始(默认)大小?

时间:2012-12-05 02:27:00

标签: python qt pyqt pyqt4 qdockwidget

我的应用程序包含大量QDockWidgets且没有中央窗口小部件。我想设置一些QDockWidgets初始大小(应用程序启动时的大小),但我不想限制它们的最小/最大大小。

怎么做?例如,我需要将初始大小设置为150x75到其中一个。我尝试了一些明显的方法(例如与停靠窗口小部件内容相关的QWidget.Resize()),但它根本不起作用。

这是一个简化的情况模型:

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_()

2 个答案:

答案 0 :(得分:9)

dockwidgets将被合并到主窗口的布局中,因此任何调整它们的尝试都将被忽略。

标准的解决方法是创建内容窗口小部件的子类并重新实现其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)

但是,这只会在您仔细管理其他dockwidgets的大小的情况下起作用。当然,最大化主窗口也会对最终结果产生影响。

您可能还需要考虑使用QMainWindow.saveStateQMainWindow.restoreState来管理dockwidgets的初始状态。

答案 1 :(得分:0)

使用fixedSize函数,如setFixedWidth / setFixedHeight。