2012-07-08 2 views

답변

0
class Widget(QtGui.QWidget): 
    def __init__(self): 
     super(Widget, self).__init__() 
     self.resize(600,400) 
     layout = QtGui.QVBoxLayout(self) 
     self.list = QtGui.QListWidget() 
     self.list.addItems(['item_%d' % i for i in xrange(9)]) 
     self.list.setViewMode(self.list.IconMode) 
     self.list.setResizeMode(self.list.Adjust) 
     self.list.installEventFilter(self) 
     layout.addWidget(self.list) 

    def eventFilter(self, obj, event): 
     if obj is self.list and event.type() == event.Resize: 
      gridsize = self.list.size()/3 
      # remove from width to account for the scrollbar 
      gridsize.setWidth(gridsize.width()-15) 
      self.list.setGridSize(gridsize) 

     return super(Widget, self).eventFilter(obj, event) 

gridSize는 전체 목록 이었지만 실제로는 셀당 생각했습니다. 여기서 중요한 점은 크기 조정 모드를 조정하여 항목 크기를 항상 다시 평가하고 목록 위젯 크기가 조정될 때마다 gridSize를 계속 조정할 수 있도록하는 것입니다. 예제에서는 이벤트 필터를 사용하고 있지만 목록을 서브 클래스 화하고 resizeEvent를 다시 구현할 수도 있습니다.

목록의 크기를 3으로 나눈 다음 스크롤 막대에 대해 일부 패딩이 제거됩니다. 결과적으로 항목은 3x 너비로 배치되고 뷰와 함께 크기가 유지됩니다.

+0

예, 실제로 예를 들어 3x3 격자 레이아웃을 유지하면서 항목 크기를 자동으로 조정할 수 있습니다. 예를 들어 resizeEvent()를 구현하지 않아도 가능합니다. – daisy

+0

lisview.setResizeMode를 조정하도록 설정하십시오. – jdi

+0

@ warl0ck : 가보겠습니다. 그렇게해야한다고 생각합니다. – jdi