@@ -59,8 +59,15 @@ def remove_layout(self, el):
5959
6060@PySideRenderer .register_remove (QFormLayout )
6161def remove_form (self , el ):
62- # Layout also deletes 'el' so no need to unset parent
63- self .removeRow (el )
62+ # Don't use removeRow, even though it should theoratically work
63+ # In reality it causes a hard crash...
64+ # Instead, take the row, and then unset the parents of the
65+ # associated widgets of the return layout item
66+ layout_item = self .takeRow (el )
67+ if layout_item :
68+ layout_item .labelItem .widget ().setParent (None )
69+ layout_item .fieldItem .widget ().setParent (None )
70+ el .setParent (None )
6471
6572
6673@PySideRenderer .register_set_attr (QLayout )
@@ -105,12 +112,31 @@ def set_grid_index(self, attr, value):
105112 layout .addWidget (self , * value )
106113
107114
108- @PySideRenderer .register_custom_attribute ("form_label" , "form_index" )
115+ @PySideRenderer .register_custom_attribute ("form_label" )
116+ def set_form_label (self , attr , value ):
117+ setattr (self , attr , value )
118+ index = getattr (self , "form_index" , None )
119+ if parent := self .parent ():
120+ layout = parent .layout ()
121+ if index is not None :
122+ label_item = layout .itemAt (index , QFormLayout .LabelRole )
123+ label_item .widget ().setText (value )
124+
125+
126+ @PySideRenderer .register_custom_attribute ("form_index" )
109127def set_form_index (self , attr , value ):
128+ old_index = getattr (self , "form_index" , None )
110129 setattr (self , attr , value )
111130 if parent := self .parent ():
112131 layout = parent .layout ()
132+ label_widget = None
133+ if old_index is not None :
134+ layout_item = layout .takeRow (old_index )
135+ label_widget = layout_item .labelItem .widget ()
136+ assert layout_item .fieldItem .widget () is self
113137 if hasattr (self , "form_label" ) and hasattr (self , "form_index" ):
114- layout .insertRow (self .form_index , self .form_label , self )
138+ layout .insertRow (
139+ self .form_index , label_widget if label_widget else self .form_label , self
140+ )
115141 elif hasattr (self , "form_label" ):
116142 layout .addRow (self .form_label , self )
0 commit comments