2014-03-07 4 views
1

런타임 중에 버튼을 눌러 새 위젯을 추가하려고합니다 (아래 예제에서 레이블 사용). 여기 예 :PyQt : 런타임 중에 스크롤 영역에 위젯 추가하기

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class Widget(QWidget): 

    def __init__(self, parent= None): 
     super(Widget, self).__init__() 

     btn_new = QPushButton("Append new label") 
     self.connect(btn_new, SIGNAL('clicked()'), self.add_new_label) 

     #Container Widget  
     self.widget = QWidget() 
     #Layout of Container Widget 
     layout = QVBoxLayout(self) 
     for _ in range(20): 
      label = QLabel("test") 
      layout.addWidget(label) 
     self.widget.setLayout(layout) 

     #Scroll Area Properties 
     scroll = QScrollArea() 
     scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) 
     scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 
     scroll.setWidgetResizable(False) 
     scroll.setWidget(self.widget) 

     #Scroll Area Layer add 
     vLayout = QVBoxLayout(self) 
     vLayout.addWidget(btn_new) 
     vLayout.addWidget(scroll) 
     self.setLayout(vLayout) 

    def add_new_label(self): 
     label = QLabel("new") 
     self.widget.layout().addWidget(label) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    dialog = Widget() 
    dialog.show() 

    app.exec_() 

응용 프로그램을 시작할 때 모든 것이 정상적으로 보입니다. 레이블 목록이 올바르게 표시되고 크기도 정확합니다. 그러나 새 레이블을 추가하기 위해 버튼을 여러 번 누르면 새 레이블이 목록에 추가되지만 크기가 변경됩니다. 목록의 모든 레이블은 작아집니다.

어떻게이 오류를 해결할 수 있습니까? 그것은 (그리고는 그래서 그들은 모두 같은 공간에서 함께 숙청 얻을)에 더 많은 자식 위젯을 추가 할 때 분명히 위젯 크기 조정을 중지

scroll.setWidgetResizable(False) 

:

답변

4

문제는 라인입니다.

그래서 True으로 재설정하고 위젯의 레이아웃의 바닥에 신축성 공간을 추가 :

def add_new_label(self): 
     label = QLabel("new") 
     layout = self.widget.layout() 
     layout.insertWidget(layout.count() - 1, label) 
:

layout.addStretch() 
    self.widget.setLayout(layout) 
    ... 
    scroll.setWidgetResizable(True) 
    scroll.setWidget(self.widget) 

다음 전에 새 라벨을 스페이서를 를 삽입