def minimumSize(self): size = QtCore.QSize() for item in self.item_list: size = size.expandedTo(item.minimumSize()) left, top, right, bottom = self.getContentsMargins() size += QtCore.QSize(left + right, top + bottom) return size
def _do_layout(self, origin): left, top, right, bottom = self.getContentsMargins() width_hint = left + right height_hint = top + bottom if self.item_list: item_size = self.item_list[0].sizeHint() item_h = item_size.height() item_w = item_size.width() multi_row = self.viewport_size.height() - height_hint > item_h if multi_row: columns = max( (self.viewport_size.width() - width_hint) // item_w, 1) rows = (len(self.item_list) + columns - 1) // columns else: columns = len(self.item_list) rows = 1 width_hint += columns * item_w height_hint += rows * item_h self.size_hint = QtCore.QSize(width_hint, height_hint) if not self.item_list: return x = origin.x() + left y = origin.y() + top for n, item in enumerate(self.item_list): i, j = n % columns, n // columns item.setGeometry( QtCore.QRect(QtCore.QPoint(x + (i * item_w), y + (j * item_h)), item_size)) self.scroll_area.set_multi_row(multi_row)
def resizeEvent(self, event): super(ScrollArea, self).resizeEvent(event) width = event.size().width() height = event.size().height() if not self.multi_row: scrollbar = self.verticalScrollBar() width -= scrollbar.width() scrollbar = self.horizontalScrollBar() if not scrollbar.isVisible(): height -= scrollbar.height() self.thumbs.set_viewport_size(QtCore.QSize(width, height))
def __init__(self, scroll_area=None, **kw): super(ThumbsLayout, self).__init__(**kw) self.scroll_area = scroll_area self.item_list = [] self.viewport_size = QtCore.QSize() self._do_layout(QtCore.QPoint(0, 0))
def sizeHint(self): h_hdr = self.horizontalHeader() v_hdr = self.verticalHeader() return QtCore.QSize(h_hdr.length() + v_hdr.sizeHint().width() + 4, v_hdr.length() + h_hdr.sizeHint().height() + 4)
def sizeHint(self): return QtCore.QSize(580, 490)