2017-08-07 13 views
0

QGroupboxにレイアウトを追加したいと思います。 this answerを読むことで、私の望む要素を問題なく追加することができます。 this answerの助けを借りて、ウィジェットをもう一度削除する方法を学びました。すべてこれはうまく動作初めて。私は今、私のQGroupboxに再び同じウィジェットを持つレイアウトを追加したいとき、それらは表示されません。Pyqtは削除後にレイアウトを追加できません

しかし、私のプリントデバッグでは、アイテムがあることがわかります。私はthis questionを知っています。ウィジェットを動的に追加する方法を示していますが、ウィジェットを削除する方法は示されていません。

マイショット:

def test_class(self): #called by a button 
    self.layout = QGridLayout() 
    label1 = QLabel('mylabel1') 
    label2 = QLabel('mylabel2') 
    combo1 = QComboBox() 

    self.layout.addWidget(label1,0,0) 
    self.layout.addWidget(label2,1,0) 
    self.layout.addWidget(combo1,2,0) 
    self.grpbox.setLayout(self.layout) # the Qgroupbox which holds the layout 


def clearLayout(self, layout): 
    print "called" 
    if layout is not None: 
     while layout.count(): 
      item = layout.takeAt(0) 
      widget = item.widget() 
      print item, widget # does print when calling the methods again 
      if widget is not None: 
       widget.deleteLater() 
      else: 
       self.clearLayout(item.layout()) 

def test_remove(self): # called by a button 
    self.clearLayout(self.layout) 

最初に追加した後、私の新しいレイアウトが表示されるよう、ループを削除する方法?

答えて

0

私は簡単なトリックで私の問題を解決しました。毎回変数self.layoutを呼び出したときにエラーが発生しました。私はボタンを押しました。私のコードのinit関数で変数を呼び出すことで、ウィジェットが出現しただけでなく、最初に削除された後で呼び出すことができる、という期待された結果が得られました。

変更は次のとおりです。

def __init__(self): 
    self.layout = QGridLayout() # created here rather then in the test_class Function 

def test_class(self): #called by a button 
    label1 = QLabel('mylabel1') 
    label2 = QLabel('mylabel2') 
    combo1 = QComboBox() 

    self.layout.addWidget(label1,0,0) 
    self.layout.addWidget(label2,1,0) 
    self.layout.addWidget(combo1,2,0) 
    self.grpbox.setLayout(self.layout) # the Qgroupbox which holds the layout 
関連する問題