class EnvEdit(QWidget): def __init__(self, path): super().__init__() self.env = laravel_env(path) self.env_dict = self.env.get_values() self.dialog = None self.init_ui() def init_ui(self): horizontal = QHBoxLayout() save_button = QPushButton("Save") save_button.clicked.connect(self.save) new_button = QPushButton("New Key") new_button.clicked.connect(self.new) horizontal.addWidget(save_button) horizontal.addWidget(new_button) self.formLayout = QFormLayout() self.formLayout.setFieldGrowthPolicy( self.formLayout.ExpandingFieldsGrow) self.formLayout.addRow(horizontal) for key, val in self.env_dict.items(): edit = QLineEdit(val) edit.setObjectName(key) self.formLayout.addRow(QLabel(key), edit) self.setLayout(self.formLayout) def add_to_form(self, key, val): edit = QLineEdit(val) edit.setObjectName(key) self.formLayout.addRow(QLabel(key), edit) def delete_from_form(self, key): # we need a button or something for this row_item = self.findChild(QLineEdit, key) idx = self.formLayout.indexOf(row_item) row = self.formLayout.getItemPosition(idx) self.formLayout.removeRow(row[0]) del self.env_dict[key] self.env.edit(self.env_dict) def new(self): self.dialog = QDialog(self) formLayout = QFormLayout(self.dialog) key_edit = QLineEdit(None) key_edit.setObjectName('Key') key_edit.textEdited.connect(self.convert_key_uppercase) val_edit = QLineEdit(None) val_edit.setObjectName('Val') formLayout.addRow(QLabel('Key'), key_edit) formLayout.addRow(QLabel('Val'), val_edit) button_box = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self.dialog) button_box.accepted.connect(self.dialog.accept) button_box.rejected.connect(self.dialog.reject) formLayout.addRow(button_box) if self.dialog.exec() == self.dialog.Accepted: key = key_edit.text() value = val_edit.text() self.env.new_key(key, value) self.env_dict[key] = value self.add_to_form(key, value) def convert_key_uppercase(self, val): self.dialog.findChild(QLineEdit, 'Key').setText(val.upper()) def save(self): for key in self.env_dict.keys(): new_val = self.findChild(QLineEdit, key).text() self.env_dict[key] = new_val self.env.edit(self.env_dict)