2012-12-05 11 views
5

Ho un'app con un numero di QDockWidgets e senza widget centrale. Voglio impostare alcune di quelle dimensioni iniziali QDockWidgets (dimensioni all'avvio dell'applicazione), ma non voglio limitare le dimensioni min/max.Come impostare la dimensione iniziale (predefinita) di QDockWidget nell'app senza widget centrale (PyQt4)?

Come fare? Ad esempio, ho bisogno di impostare la dimensione iniziale 150x75 su una di esse. Ho provato metodi ovvi (come ad esempio QWidget.Resize() relativi al contenuto del widget dock), ma non ha funzionato affatto.

Ecco un modello semplificato di situazione:

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' deve sempre avere un widget centrale ma puoi provare a impostare la sua dimensione su 0. – alexisdm

+0

@alexisdm, beh, come farlo? Puoi per favore pubblicare un codice che mi può aiutare? Grazie! –

+0

Ad esempio, con 'mw.setCentralQWidget (QWidget())' e 'mw.centralWidget(). SetFixedSize (0,0)'. [Quella domanda] (http://stackoverflow.com/q/10067821/894321) mostra il tipo di problemi che puoi avere senza impostare il widget centrale. – alexisdm

risposta

7

I dockwidgets saranno incorporati nel layout della finestra principale, in modo che qualsiasi tentativo di ridimensionare loro saranno ignorati.

La soluzione standard per questo è quello di creare una sottoclasse del widget contenuti e reimplementare la sua 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) 

Tuttavia, questo funziona solo nella misura in cui anche voi gestire con attenzione le dimensioni degli altri dockwidgets . E ovviamente il massimo della finestra principale avrà un impatto sul risultato finale.

Si potrebbe anche prendere in considerazione l'utilizzo di QMainWindow.saveState e QMainWindow.restoreState per gestire lo stato iniziale dei dockwidgets.

0

Utilizzare la funzione fixedSize come setFixedWidth/setFixedHeight.

+0

Ciò consente al widget di raggiungere esattamente quella dimensione; il poster originale voleva solo la dimensione predefinita, non la dimensione minima e massima da impostare. – RolKau

Problemi correlati