【发布时间】:2019-07-05 21:50:59
【问题描述】:
我被要求使用 PyQt 创建一个 GUI,而不使用任何 Qtdesigner 来完成我的任务。但现在我面临一个问题。在此图片 GUI 屏幕截图中
如您所见,有一个旋转框“Anzahl der Schicht”。我想要做的是,当用户设置这个 spinbox 的值时,它下面的区域将显示输入的相应行(QLineEdit、QSlider Widget、QLineEdit 和 2 个 QSpinbox 的组合)。
例如,我上传的图片,表示spinbox“Anzahl der Schicht”的值为3,所以它下面有3行。如果值为 4,则应该有 4 行。 spinbox 的价值没有限制。如何为 GUI 制作这种动态效果?
2019 年 7 月 5 日更新 感谢所有有用的回复。以下代码和图片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_())
【问题讨论】:
-
展示你的尝试
-
这听起来像是“可变数量的变量”:stackoverflow.com/questions/1373164/…
-
@S.Nick,@eyllanesc 我刚刚附上了代码。如果您仍然对它感兴趣,请看一下。
标签: python python-3.x user-interface pyqt