Python 按下按钮时如何在QFormLayout中添加更多行
我正在使用PySide6制作一个数据库编辑器。我制作了一个QPushButton,在QFormLayout中添加了两行。 看起来不错吧?这就是单击“添加另一列”之前的情况。 但是我点击了一下,并没有再做两行,而是把它们移到了最后 这是我的密码:Python 按下按钮时如何在QFormLayout中添加更多行,python,user-interface,pyqt,pyside,pyside6,Python,User Interface,Pyqt,Pyside,Pyside6,我正在使用PySide6制作一个数据库编辑器。我制作了一个QPushButton,在QFormLayout中添加了两行。 看起来不错吧?这就是单击“添加另一列”之前的情况。 但是我点击了一下,并没有再做两行,而是把它们移到了最后 这是我的密码: def addTableForm(self): def addColumnForm(): layout.addRow(columnNameLabel, columnName) layout.addRow(col
def addTableForm(self):
def addColumnForm():
layout.addRow(columnNameLabel, columnName)
layout.addRow(columnTypeLabel, columnType)
layout = QFormLayout(self)
widget = QWidget(self)
tableNameLabel = QLabel(parent=self, text="Enter the table name")
tableName = QLineEdit(parent=self)
columnNameLabel = QLabel(parent=self, text="Add a column")
columnName = QLineEdit(parent=self)
columnTypeLabel = QLabel(parent=self, text="Enter the type of the column")
columnType = QLineEdit(parent=self)
moreColumnsLabel = QLabel(parent=self, text="Add another column")
moreColumns = QPushButton(parent=self, text="Add another column", clicked=addColumnForm)
moreColumns.setFixedWidth(200)
cancel = QPushButton(self, text="Cancel", clicked=self.selectTables)
confirm = QPushButton(self, text="Confirm")
layout.addRow(tableNameLabel, tableName)
addColumnForm()
layout.addRow(moreColumnsLabel, moreColumns)
layout.addRow(cancel, confirm)
widget.setLayout(layout)
self.setCentralWidget(widget)
该函数位于一个MainWindow类中,继承了QMainWindow。
你能帮帮我吗?顺便问一下,你能给我一些造型技巧吗?我不喜欢所有小部件都挤在一起的方式
感谢小部件是独特的实例,如果您再次尝试将它们添加到布局中,它们不会被“复制”。事实上,您并没有添加新的小部件,您只是告诉布局使用给定的小部件添加一行,因为这些小部件已经在布局中,结果是它们被删除,并添加到“新”行中,从而导致它们发生移动 您需要的是动态创建新的小部件,并且由于您可能需要它们的内容,所以您应该保留它们的引用 一种可能的实施方式如下:
def addTableForm(self):
columnWidgets = []
def addColumnForm():
columnName = QLineEdit()
layout.addRow("Add a column", columnName)
columnType = QLineEdit()
layout.addRow("Enter the type of the column", columnType)
columnWidgets.append((columnName, columnType))
def getColumnData():
return [(n.text(), t.text()) for n, t in columnWidgets]
widget = QWidget()
layout = QFormLayout(widget)
tableName = QLineEdit()
moreColumns = QPushButton(text="Add another column", clicked=addColumnForm)
moreColumns.setFixedWidth(200)
layout.addRow("Enter the table name", tableName)
addColumnForm()
layout.addRow("Add another column", moreColumns)
cancel = QPushButton("Cancel", clicked=self.selectTables)
confirm = QPushButton("Confirm")
confirm.clicked.connect(lambda: self.createTable(tableName.text(), getColumnData()))
layout.addRow(cancel, confirm)
widget.setLayout(layout)
self.setCentralWidget(widget)
一些注意事项:
- 如果
是QMainWindow(不支持设置布局),则不应使用self
,因为QLayout构造函数的小部件参数是将在其上设置布局的小部件;您应该使用将用作中心小部件的小部件李>QFormLayout(self)
- 您不必总是为将要添加到布局中的小部件指定父部件:添加这些小部件的那一刻,父部件将自行拥有它们的所有权李>
- 除非您需要设置特定的特性,否则不必为第一列创建QLabel,只需使用字符串李>
- 如果QPushButton的第一个参数是字符串,则不需要使用关键字李>