2017-11-01 3 views
0

私はQVBoxレイアウトを使用しており、レイアウトには2つのウィジェットと動的レイアウト 'layout2'があります。ウィジェット1は上に固定されています。ウィジェット3は下に固定され、ウィジェット2は動的ウィジェットです。 layout2は毎回削除され、追加されます。ここでの問題は、レイアウト2のレイアウトが削除されたときにwidget3を最下部に配置できないことです.Widget3が上に移動します。以下はサンプルコードです。Pyqt5 add widgetの間に追加しますか?

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

はいウィジェットを動的に変更し、Widget1とwidget3の間に配置します 簡単にするために、レイアウト2ではラベルを1つだけ追加しましたが、それ以上のラベルを追加しました。 ありがとうございます –

+0

ポジションはどういう意味ですか? – eyllanesc

答えて

1

2番目の位置にあるウィジェットを変更する場合は、新しいレイアウトの作成を削除する必要はありません。次の例では、ウィジェットがどのように変更されているかを確認するだけで再利用する必要があります。

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

ありがとう –

関連する問題