Foros Python

Versión completa: Error al capturar el valor de una celda en QTableWidget
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos:

Estoy aprendiendo este lenguaje y soy nuevo en el foro.

Tengo un codigo que incluye un QTableWidget de varias columnas y necesito mostrar una informacion en una caja de texto  cada vez que se desplaza el cursor  con el evento itemSelectionChanged de esta tabla.

El codigo es el siguiente:

TabledeSintomas -> tabla que se esta usando
showRemedios -> evento que se desencadena al mover el cursor

self.TabledeSintomas.itemSelectionChanged.connect(lambda : self.showRemedios( ))


def showRemedios(self):
        """ 
        MUESTRA LOS REMEDIOS DEL SINTOMA DONDE ESTA EL CURSOR
        """
        
        #col 4 es la columna de remedios que se va a mostrar
        

        currow = self.TabledeSintomas.currentRow()
        xcelda = self.TabledeSintomas.item(currow , 4)
        xremedios = xcelda.text()
        print (xremedios)

La primera que se ejecuta corre bien pero cuando se cambia el contenido de la tabla me genera el error

File "C:\projects\Trivium7\Trivium7spyder\LlamasintomasTriv.py", line 105, in showRemedios
  xremedios = xcelda.text()

builtins.AttributeError: 'NoneType' object has no attribute 'text'
        
Quisiera saber que error estoy cometiendo o si hay otra forma de actualizar esta variable capturando el valor de la celda.

Gracias por su ayuda.
Hola, bienvenido!

El problema probablemente sea que cuando el contenido de la tabla se actualiza la selección se borra. Si la selección se borra tu variable xcelda va a ser None, porque no hay ninguna celda seleccionada. Lo único que deberías hacer es agregar la siguiente comprobación para que la función termine en estos casos:

  1. xcelda = self.TabledeSintomas.item(currow , 4)
  2. if xcelda is None:
  3. return


Por cierto, respecto de este código:

  1. self.TabledeSintomas.itemSelectionChanged.connect(lambda : self.showRemedios( ))


Crear una función lambda no es necesario, simplemente puedes dejarlo así:

  1. self.TabledeSintomas.itemSelectionChanged.connect(self.showRemedios)


Saludos!