2017-12-20 23 views
0

ここに私のコードです。私はあなたがドロップダウンボックスを変更すると、多かれ少なかれ入力にQLineEditsを動的に表示するようにしています。これは、テストのちょうど最新の繰り返しです要素内の要素を動的に追加/削除するにはどうすればよいですか?

import sys 
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, 
    QInputDialog, QApplication, QComboBox, QFrame) 

import numpy as np 


class GUI(QWidget): 

    def __init__(self): 
     super().__init__() 

     self.initgui() 

    def initgui(self): 
     # 
     # Set up GUI 
     # 
     self.setGeometry(100, 100, 400, 400) 
     self.move(300, 300) 
     combobox = QComboBox(self) 
     for i in range(1, 10, 1): 
      combobox.addItem(str(i + 1)) 
     combobox.activated[str].connect(self.comboboxchanged) 
     self.setWindowTitle("Testing Easy Setup") 
     self.show() 

    def comboboxchanged(self, text): 
     frame = QWidget(self) 
     frame.hide() 
     for num in range(0, int(text), 1): 
      QLineEdit(frame).move(60, num * 19) 
     frame.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    gui = GUI() 
    sys.exit(app.exec_()) 

答えて

1

問題は、あなたがそれはあなたのケースQFrameには、親に対する0、0位置に配置されたウィジェットに親を渡すときの一番上にあるということですQComboBoxは両方とも0、0の位置にあるためです。適切なことは、レイアウトを使用することです。一方、新しいウィジェットを追加する前にウィジェットを削除する必要があります。ウィジェットを削除する関数を作成します。

import sys 
from PyQt5.QtWidgets import * 

def clearLayout(lay): 
    while lay.count() > 0: 
     item = lay.takeAt(0) 
     widget = item.widget() 
     if widget: 
      widget.deleteLater() 
     del item 


class GUI(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initgui() 

    def initgui(self): 
     lay = QHBoxLayout(self) 
     vlay1 = QVBoxLayout() 
     combobox = QComboBox(self) 
     combobox.addItems([str(i) for i in range(2, 11)]) 
     vlay1.addWidget(combobox) 
     vlay1.addItem(QSpacerItem(20, 245, QSizePolicy.Minimum, QSizePolicy.Expanding)) 

     self.vlay2 = QVBoxLayout() 
     lay.addLayout(vlay1) 
     lay.addLayout(self.vlay2) 
     self.comboboxchanged(combobox.currentText()) 
     combobox.activated[str].connect(self.comboboxchanged) 
     self.setWindowTitle("Testing Easy Setup") 
     self.show() 

    def comboboxchanged(self, text): 
     clearLayout(self.vlay2) 
     for num in range(0, int(text)): 
      self.vlay2.addWidget(QLineEdit(self)) 
     self.vlay2.addItem(QSpacerItem(20, 245, QSizePolicy.Minimum, QSizePolicy.Expanding)) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    gui = GUI() 
    sys.exit(app.exec_()) 
+0

大変ありがとうございます!正確には私が探していたものではありませんでしたが、最終的な解決に私が必要としていたものの十分な説明がありました –

関連する問題