2012-12-05 246 views
5

我有一个很多QDockWidgets和没有中央部件的应用程序。我想设置一些QDockWidgets初始大小(应用程序开始时的大小),但我不想限制它们的最小/最大大小。如何在没有中央小部件(PyQt4)的应用程序中设置QDockWidget初始(默认)大小?

怎么办?例如,我需要将初始大小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_() 
+1

'QMainWindow'必须始终有一个中央部件,但您可以尝试将其大小设置为0. – alexisdm

+0

@alexisdm,好吧,该怎么做?你可以请张贴一些可以帮助我的代码吗?谢谢! –

+0

例如,使用'mw.setCentralQWidget(QWidget())'和'mw.centralWidget()。setFixedSize(0,0)'。 [这个问题](http://stackoverflow.com/q/10067821/894321)显示了你可以在没有设置中央部件的情况下遇到的问题。 – alexisdm

回答

7

的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的初始状态。

0

使用fixedSize函数,作为setFixedWidth/setFixedHeight。

+0

这会使小部件精确到这个大小;原始海报只需要默认尺寸,而不是要设置的最小和最大尺寸。 – RolKau

相关问题