@@ -44,6 +44,7 @@ def __init__(self, pixmap, parent=None):
4444 self .setCacheMode (QGraphicsItem .ItemCoordinateCache )
4545 self ._pixmap = pixmap
4646 self ._pixmapSize = QSizeF ()
47+ self ._keepAspect = True
4748 self .setSizePolicy (QSizePolicy .Fixed , QSizePolicy .Fixed )
4849
4950 def setPixmap (self , pixmap ):
@@ -54,30 +55,29 @@ def setPixmap(self, pixmap):
5455 def pixmap (self ):
5556 return QPixmap (self ._pixmap )
5657
57- def setPixmapSize (self , size ):
58- if self ._pixmapSize != size :
59- self ._pixmapSize = QSizeF (size )
60- self .updateGeometry ()
61-
62- def pixmapSize (self ):
63- if self ._pixmapSize .isValid ():
64- return QSizeF (self ._pixmapSize )
65- else :
66- return QSizeF (self ._pixmap .size ())
67-
6858 def sizeHint (self , which , constraint = QSizeF ()):
6959 if which == Qt .PreferredSize :
70- return self .pixmapSize ( )
60+ return QSizeF ( self ._pixmap . size () )
7161 else :
7262 return QGraphicsWidget .sizeHint (self , which , constraint )
7363
64+ def setKeepAspectRatio (self , keep ):
65+ if self ._keepAspect != keep :
66+ self ._keepAspect = bool (keep )
67+ self .update ()
68+
69+ def keepAspectRatio (self ):
70+ return self ._keepAspect
71+
7472 def paint (self , painter , option , widget = 0 ):
7573 if self ._pixmap .isNull ():
7674 return
7775
7876 rect = self .contentsRect ()
79-
80- pixsize = self .pixmapSize ()
77+ pixsize = QSizeF (self ._pixmap .size ())
78+ aspectmode = (Qt .KeepAspectRatio if self ._keepAspect
79+ else Qt .IgnoreAspectRatio )
80+ pixsize .scale (rect .size (), aspectmode )
8181 pixrect = QRectF (QPointF (0 , 0 ), pixsize )
8282 pixrect .moveCenter (rect .center ())
8383
@@ -133,13 +133,13 @@ def __init__(self, pixmap, title="", parent=None):
133133
134134 layout .addItem (self .pixmapWidget )
135135 layout .addItem (self .labelWidget )
136-
136+ layout . addStretch ()
137137 layout .setAlignment (self .pixmapWidget , Qt .AlignCenter )
138138 layout .setAlignment (self .labelWidget , Qt .AlignHCenter | Qt .AlignBottom )
139+
139140 self .setLayout (layout )
140141
141- self .setSizePolicy (QSizePolicy .MinimumExpanding ,
142- QSizePolicy .MinimumExpanding )
142+ self .setSizePolicy (QSizePolicy .Minimum , QSizePolicy .Minimum )
143143
144144 self .setFlag (QGraphicsItem .ItemIsSelectable , True )
145145 self .setTitle (title )
@@ -179,18 +179,14 @@ def paint(self, painter, option, widget=0):
179179 painter .save ()
180180 painter .setPen (QPen (QColor (125 , 162 , 206 , 192 )))
181181 painter .setBrush (QBrush (QColor (217 , 232 , 252 , 192 )))
182- painter .drawRoundedRect (QRectF ( contents . topLeft (),
183- self .geometry ().size ()), 3 , 3 )
182+ painter .drawRoundedRect (
183+ QRectF ( contents . topLeft (), self .geometry ().size ()), 3 , 3 )
184184 painter .restore ()
185185
186186 def _updatePixmapSize (self ):
187- pixmap = self .pixmap ()
188- if not pixmap .isNull () and self ._size .isValid ():
189- pixsize = QSizeF (self .pixmap ().size ())
190- pixsize .scale (self ._size , Qt .KeepAspectRatio )
191- else :
192- pixsize = QSizeF ()
193- self .pixmapWidget .setPixmapSize (pixsize )
187+ pixsize = QSizeF (self ._size )
188+ self .pixmapWidget .setMinimumSize (pixsize )
189+ self .pixmapWidget .setMaximumSize (pixsize )
194190
195191
196192class ThumbnailWidget (QGraphicsWidget ):
@@ -207,6 +203,16 @@ def setGeometry(self, geom):
207203 super (ThumbnailWidget , self ).setGeometry (geom )
208204 self .reflow (self .size ().width ())
209205
206+ def event (self , event ):
207+ if event .type () == QEvent .LayoutRequest :
208+ sh = self .effectiveSizeHint (Qt .PreferredSize )
209+ self .resize (sh )
210+ self .layout ().activate ()
211+ event .accept ()
212+ return True
213+ else :
214+ return super ().event (event )
215+
210216 def reflow (self , width ):
211217 if not self .layout ():
212218 return
@@ -232,6 +238,8 @@ def reflow(self, width):
232238 for i , item in enumerate (items ):
233239 layout .addItem (item , i // ncol , i % ncol )
234240
241+ layout .invalidate ()
242+
235243 def items (self ):
236244 layout = self .layout ()
237245 if layout :
0 commit comments