[PyQt] Dynamically add and remove QLineEdit's - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [PyQt] Dynamically add and remove QLineEdit's (/thread-27799.html) |
Dynamically add and remove QLineEdit's - GMCobraz - Jun-22-2020 Dear all, Anyone got idea how to add complete new blank row as previous row? Without do it manually or add in GUI first. For example like fill in information for a family member. We not sure the exact number of members. So we can add or remove additional row in the program, by clicking add button or remove button. Please give me some hints. I am using PySide2 as tool to create the GUI. Thanks RE: Add or copy whole row as new row - Larz60+ - Jun-22-2020 Please share your code, It really is required in order to provide a good answer. RE: Add or copy whole row as new row - GMCobraz - Jun-23-2020 Dear all, This is one example that I copy from a website. I wish to duplicate the row without duplicating like name1, name 2 in the code and show in GUI. I want initial with one row. But with add or remove button, I can simply duplicate or remove the row. May I get some hints from you guys. Thanks. import sys from PySide2 import QtCore, QtWidgets from PySide2.QtWidgets import QMainWindow, QWidget, QLabel, QLineEdit from PySide2.QtWidgets import QPushButton from PySide2.QtCore import QSize class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setMinimumSize(QSize(320, 140)) self.setWindowTitle("PyQt Line Edit example (textfield) - pythonprogramminglanguage.com") self.nameLabel = QLabel(self) self.nameLabel.setText('Name:') self.line = QLineEdit(self) self.line.move(80, 20) self.line.resize(200, 32) self.nameLabel.move(20, 20) pybutton = QPushButton('OK', self) pybutton.clicked.connect(self.clickMethod) pybutton.resize(200,32) pybutton.move(80, 60) def clickMethod(self): print('Your name: ' + self.line.text()) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) mainWin = MainWindow() mainWin.show() sys.exit(app.exec_()) RE: Add or copy whole row as new row - Yoriz - Jun-23-2020 I have had a go but keep in mind that I don't use pyside/pyqt so its just thrown together from looking at random tutorials. The frame does not resize based on the widgets, I didn't figure that out yet. Note: I had PyQt5 installed with anaconda so I just changed all the imports, hopefully, it works in PySide2 too. import sys from PySide2 import QtCore, QtWidgets from PySide2.QtWidgets import QMainWindow, QWidget, QLabel, QLineEdit, QFormLayout from PySide2.QtWidgets import QPushButton, QVBoxLayout, QHBoxLayout from PySide2.QtCore import QSize class MainWindow(QWidget): def __init__(self): QWidget.__init__(self) self.setMinimumSize(QSize(320, 220)) self.setWindowTitle( "PyQt Line Edit example (textfield) - pythonprogramminglanguage.com") self.controls = [] button1 = QPushButton('add field', self) button1.clicked.connect(self.add_field) button2 = QPushButton('remove field', self) button2.clicked.connect(self.remove_field) button3 = QPushButton('OK', self) button3.clicked.connect(self.clickMethod) vbox = QVBoxLayout() formlayout = QFormLayout() vbox.addLayout(formlayout) hbox = QHBoxLayout() hbox.addWidget(button1) hbox.addWidget(button2) vbox.addLayout(hbox) vbox.addWidget(button3) self.setLayout(vbox) self.formlayout = formlayout self.add_field() def add_field(self): edit = QLineEdit(self) self.controls.append(edit) self.formlayout.addRow('Name', edit) def remove_field(self): if len(self.controls) > 1: edit = self.controls.pop() self.formlayout.removeRow(edit) def clickMethod(self): names = ', '.join(edit.text() for edit in self.controls) print(f'Names: {names}') if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) mainWin = MainWindow() mainWin.show() sys.exit(app.exec_()) |