La fila superior de PyQt5 en QFormLayout no responde al clic del ratón.
Usando QtDesigner y PyQt5 con pyuic5 estoy configurando un FormLayout con un número variable de filas.
Cada fila es un widget personalizado creado en QtDesigner, que consiste en un QLabel y un QHBoxLayout que contiene un QLineEdit y un QPushButton.
Creo la interfaz de fila usando
def get<em>data</em>widget(parent=None, **kwargs):
widget = QtWidgets.QWidget(parent)
dlg<em>ui = wgtDataRow.Ui</em>Form() # del widget hecho a medida
dlg_ui.setupUi(widget)
<pre><code> # asegurar recursivamente que todos los objectName() sean únicos
rename_widget(widget, "_%s" % unique_id())
dlg_ui.label.setText(kwargs.get('name') or '')
dlg_ui.editData.setText(kwargs.get('value') or '')
return dlg_ui
</code></pre>
<p><code>
La interfaz de fila se inserta en el QFormLayout en un método de QDialog:
</code>
def add<em>data</em>entry<em>row(self, name, **kwargs):
# código simplificado, pero esto es lo que afecta al QFormLayout
posn = kwargs.get('position', 0)
data</em>ui = get<em>data</em>widget(self, name=name, value=kwargs.get('value'))
self.dlg<em>ui.formLayout.insertRow(posn, data</em>ui.label, data_ui.widget)
El problema que tengo es que la primera fila del QFormLayout no responde a los clics del ratón.
Si inserto una nueva fila en la posición 0, la fila previamente no responsable se mueve hacia abajo y se vuelve responsiva y la nueva fila (arriba) no responde.
¿Alguien puede arrojar luz sobre esto?
davy.ai
Parece que el problema podría estar relacionado con el orden de agregar las interfaces de fila al QFormLayout. La primera fila podría no estar obteniendo el enfoque o el manejo de eventos correctos debido a ser agregada al final.
Una sugerencia sería intentar establecer el orden de pestaña de las interfaces de fila en QtDesigner y ver si eso ayuda. Otra opción podría ser utilizar el método
setFocusPolicy(QtCore.Qt.StrongFocus)
en los widgets de la interfaz de fila para asegurarse de que reciban los eventos de teclado y mouse correctamente.También podría valer la pena intentar agregar las filas en orden inverso (es decir, comenzando desde el fondo) y ver si eso cambia el comportamiento.
En general, podría ser necesario obtener más información o código para diagnosticar y solucionar el problema de manera más específica.