Меня попросили создать графический интерфейс с PyQt без использования Qtdesigner для моего задания.Но сейчас я столкнулся с проблемой.На этом снимке экрана с графическим интерфейсом пользователя
, как вы можете видеть, есть спинбокс "Anzahl der Schicht".То, что я хочу сделать, это когда пользователь устанавливает значение для этого спинбокса, в области под ним будут отображаться соответствующие строки ввода (комбинация QLineEdit, QSlider Widget, QLineEdit и 2 QSpinboxes в строке).
Например, фотография, которую я загрузил, означает, что значение spinbox "Anzahl der Schicht" равно 3, поэтому под ним 3 строки.Если значение равно 4, должно быть 4 строки.Существует не ограниченное значение для Spinbox.Как я могу сделать такой динамический эффект для графического интерфейса?
Обновление от 05.07.2019 Спасибо за все полезные ответы.Следующий код и рис GUI version2 - мой текущий статус.Пока я не могу подключить Qspinbox к классу Widget () для добавления или удаления строк.Поэтому я просто использую кнопку «Добавить виджет», чтобы реализовать то, что я хочу.
class ExampleWidget(QtWidgets.QGroupBox):
def __init__(self, numAddWidget):
QtWidgets.QGroupBox.__init__(self)
self.numAddWidget = numAddWidget
self.initSubject()
self.organize()
self.setFlat(True)
self.setStyleSheet("border: 1px solid transparent")
def initSubject(self):
self.shiftname =QtWidgets.QLineEdit() # Eingabefeld init
self.shiftname.setText('0')
self.shiftpercent = QtWidgets.QSlider()
self.shiftpercent.setOrientation(QtCore.Qt.Horizontal)
self.carnum =QtWidgets.QLineEdit() # Eingabefeld init
self.carnum.setText('0')
self.start = QtWidgets.QTimeEdit()
self.start.setDisplayFormat("HH:mm")
self.end = QtWidgets.QTimeEdit()
self.end.setDisplayFormat("HH:mm")
def organize(self):
grid = QtWidgets.QGridLayout(self)
self.setLayout(grid)
grid.addWidget(self.shiftname, 0,0)
grid.addWidget(self.shiftpercent, 0,1)
grid.addWidget(self.carnum, 0,2)
grid.addWidget(self.start, 0,3)
grid.addWidget(self.end, 0,4)
class Widget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.numAddWidget = 1
self.initUi()
def initUi(self):
self.layoutV = QtWidgets.QVBoxLayout(self)
self.area = QtWidgets.QScrollArea(self)
self.area.setWidgetResizable(True)
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.layoutH = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents)
self.gridLayout = QtWidgets.QGridLayout()
self.layoutH.addLayout(self.gridLayout)
self.area.setWidget(self.scrollAreaWidgetContents)
self.add_button = QtWidgets.QPushButton("Add Widget")
self.layoutV.addWidget(self.add_button)
self.layoutV.addWidget(self.area)
self.add_button.clicked.connect(self.addWidget)
self.widget = ExampleWidget(self.numAddWidget)
self.gridLayout.addWidget(self.widget)
def addWidget(self):
self.numAddWidget += 1
self.widget = ExampleWidget(self.numAddWidget)
self.gridLayout.addWidget(self.widget)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())