2017-11-01 7 views
0

QVBox 레이아웃을 사용하고 있으며 레이아웃에 두 개의 위젯과 동적 레이아웃 'layout2'가 있습니다. 위젯 1은 상단에 고정됨 위젯 3은 하단에 고정되고 위젯 2는 동적 위젯입니다. layout2는 매번 삭제되고 추가됩니다. 여기서 문제는 layout2 레이아웃이 삭제 된 widget3을 맨 아래에 배치 할 수 없다는 것입니다. 위젯 3이 맨 위로 이동합니다. 아래는 샘플 코드입니다.위젯 사이에 Pyqt5 추가 스트래칭?

class Screen(QWidget): 
    def __init__(self):    
     super(Screen, self).__init__() 

     self.main_layout = QVBoxLayout() 
     widget1 = QPushButton("Text1") 
     #self.widget2 = QWidget() 
     widget3 = QLabel("Text3") 
     self.widget2_layout = QHBoxLayout() 
     widget2_label = QLabel("text2") 
     self.widget2_layout.addWidget(widget2_label) 
     #self.widget2.setLayout(self.widget2_layout) 
     self.main_layout.addWidget(widget1,Qt.AlignTop) 
     self.main_layout.addLayout(self.widget2_layout) 
     self.main_layout.addWidget(widget3,Qt.AlignBottom) 
     widget1.clicked.connect(self.change_widget2)  
     self.setLayout(self.main_layout)  
     self.show() 

    def clearLayout(self,layout): 
     item = layout.takeAt(0) 
     while item: 
      w = item.widget() 
      if w: 
       w.deleteLater() 
      lay = item.layout() 
      if lay: 
       self.clearLayout(item.layout()) 
      item = layout.takeAt(0) 
    def change_widget2(self): 
     self.clearLayout(self.widget2_layout) 
     self.widget2_layout = QHBoxLayout() 
     widget2_label = QLabel("text changed") 
     self.widget2_layout.addWidget(widget2_label) 
     self.main_layout.addLayout(self.widget2_layout) 

app = QApplication(sys.argv) 
Gui = Screen() 
sys.exit(app.exec_()) 

나는 addstretch, 더미 추가 레이아웃을 시도했지만 아무런 효과가 없었습니다.

+0

위키 2를 동적으로 변경하려고한다는 것부터 알고 있습니다. 내가 맞습니까? – eyllanesc

+0

예 위젯을 동적으로 변경하고 위젯 1과 위젯 3 사이에 배치하십시오. 간단히하기 위해 레이아웃 2에는 단 하나의 레이블을 추가했지만 그 이상의 레이블을 추가했습니다. 정말 고마워요 –

+0

위치에 따라 무엇을 의미합니까? – eyllanesc

답변

1

두 번째 위치에있는 위젯 만 변경하려는 경우 새 레이아웃 만들기를 삭제할 필요는 없습니다. 다음 예제에서 위젯이 어떻게 변경되는지 알 수 있습니다 :

class Screen(QWidget): 
    def __init__(self): 
     super(Screen, self).__init__() 
     self.setLayout(QVBoxLayout()) 

     widget1 = QPushButton("Text1", self) 
     widget3 = QLabel("Text3", self) 

     self.widget2_layout = QHBoxLayout() 
     self.change_widget2() 

     self.layout().addWidget(widget1) 
     self.layout().addLayout(self.widget2_layout) 
     self.layout().addWidget(widget3) 

     widget1.clicked.connect(self.change_widget2) 

    def clearLayout(self, layout): 
     item = layout.takeAt(0) 
     while item: 
      w = item.widget() 
      if w: 
       w.deleteLater() 
      lay = item.layout() 
      if lay: 
       self.clearLayout(item.layout()) 
      item = layout.takeAt(0) 

    def change_widget2(self): 
     self.clearLayout(self.widget2_layout) 

     # change the widget. 
     import random 
     widgets = [QLabel, QLineEdit, QPushButton] 
     widget2 = widgets[random.randint(0, len(widgets)-1)]("widget2", self) 

     self.widget2_layout.addWidget(widget2) 
+0

대단히 감사합니다. –