es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.