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.

¿Cómo deseleccionar una celda seleccionada en QTableWidget haciendo clic en ella de nuevo?

Estoy tratando de deseleccionar una celda seleccionada en QTableWidget al hacer clic nuevamente en ella. No sé si me he perdido una opción o una señal en la documentación (espero que no). Lo intenté con las señales cellClicked y cellActivated. Ninguna de ellas funciona. El problema es que si una celda está en un estado no seleccionado y hago clic en ella, en el momento en que se emite la señal cellClicked, la celda ya está seleccionada. Por lo tanto, no puedo verificar la selección en un slot que reacciona a esa señal.

Entonces, ¿cómo puedo deseleccionar una celda seleccionada? El modo de selección es SingleSelection. Solo espero no tener que subclasificar QTableWidget.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una posible solución para deseleccionar una celda seleccionada en QTableWidget es utilizar la señal currentItemChanged y verificar si el elemento recién seleccionado es el mismo que el elemento previamente seleccionado. Si es así, significa que la celda está siendo seleccionada nuevamente, por lo que debe ser deseleccionada. Aquí hay un ejemplo de código:

    def handle_item_selection(self, current, previous):
        if current == previous:
            self.table_widget.clearSelection()
    
    # Conecta la señal currentItemChanged al slot handle_item_selection
    self.table_widget.currentItemChanged.connect(self.handle_item_selection)
    

    Este código conecta la señal currentItemChanged al slot handle_item_selection. Cuando se emite esta señal, los elementos current y previous se pasan como argumentos. Si son iguales, lo que significa que la celda está siendo seleccionada nuevamente, se llama al método clearSelection para deseleccionar la celda.

    Ten en cuenta que esta solución asume que el modo de selección es SingleSelection. Si el modo de selección es MultiSelection, este código debería modificarse para manejar múltiples elementos seleccionados.

Comments are closed.