Re: [Python-es] python: core dumped.. ¿manejo de excepciones?

Claudio A. Quezada R. claudio.quezada.r en gmail.com
Mar Ago 21 19:09:36 CEST 2007


Incluyo el código completo, por si alguien más tiene problemas similares. Si
alguien sabe como reimplementar el QApplication::Notify() en PyQt 4, aviseme
por favor.

Sobre el metodo, no sólo hay que establecer las banderas que mencionaba,
sino hay que evaluar si el item existe:

    def generarTabBiometria(self):

        grilla = self.ui.grillaDatos
        biometria = self.ui.grillaBiometria
        biometria.setRowCount(1)
        total = 0
        for j in range(grilla.rowCount()):
                especie = QtGui.QTableWidgetItem()
                especie.setText(grilla.verticalHeaderItem(j).text())
                for i in range(grilla.columnCount()):
                    if grilla.item(j,i):
                        estacion = QtGui.QTableWidgetItem()
                        estacion.setText(grilla.horizontalHeaderItem
(i).text())
                        individuos = int(grilla.item(j,i).text())
                        total += individuos
                        biometria.setRowCount(total)

                        for k in range(total-individuos,total):
                         item = biometria.item(k,0)
                         if item is None:
                         item = QtGui.QTableWidgetItem(str(estacion.text()))
                         biometria.setItem(k,0,item)
                         else:
                         biometria.item(k,0).setFlags(Q
tCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
                         biometria.setItem(k,0,estacion)

                         item = biometria.item(k,1)
                         if item is None:
                         item = QtGui.QTableWidgetItem(str(especie.text()))
                         biometria.setItem(k,1,item)
                         else:
                         biometria.item(k,1).setFlags(
QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
                         biometria.setItem(k,1,especie)

                biometria.resizeColumnToContents(0)
                biometria.resizeColumnToContents(1)


Saludos,

Claudio


El 20/08/07, Claudio A. Quezada R. <claudio.quezada.r en gmail.com> escribió:
> Hola,
>
> Si, había hecho varias pruebas como las que mencionas, pero al parecer
> el problema si era de mi código, le incorporé dos flags:
>
> biometria.item(k,0).setFlags(
QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
>
>
> Previo al set item ( biometria.setItem(k,0,item) ), y ahora no falla.
>
> Saludos,
>
> El 15/08/07, Chema Cortes <pych3m4 en gmail.com> escribió:
> > El 13/08/07, Claudio A. Quezada R. <claudio.quezada.r en gmail.com>
escribió:
> >
> > > Ahora, el asunto es que si yo "hecho a andar" el método, por primera
> > > vez, funciona de perillas. El error se produce a la segunda ocasión
> > > que lo llamo, en la que ya hay contenido en la grillaBiometria. Hay
> > > otros métodos para eliminar filas, eliminar el contenido de las
> > > celdas, uno para destruir el widget y varios más. Los he probado todos
> > > y en algún momento me dan problemas (especialmente si itero con 10000
> > > o 15000 individuos)... Entonces por lo que me he dado cuenta el asunto
> > > no es al llenar la grillaBiometria por primera vez, sino, al
> > > reemplazar el contenido, al destruirlo, o algo por el estilo en el
> > > setItem(row,column,item)...
> >
> > Umm!! Entonces el asunto puede ser más chungo. Estás hablando de miles
> > de objetos que se crean y se destruyen. Es muy posible que no se haga
> > bien, que queden referencias a objetos inválidas, o que éstos nunca se
> > destruyan ocupando la memoria inútilmente.
> >
> > Cuando creas una instancia en PyQt se crean tres objetos: el de C++
> > (qt), el wrapper de la librería SIP y el objeto python (pyqt). El
> > responsable de que todo funcione sincronizadamente es SIP; pero hay
> > reportados problemas como el que comentas, así que añade a tus tareas
> > el cambiar a otras versiones de pyqt y sip (prueba con versiones
> > anteriores a la que está usando).
> >
> > De todos modos, haz la prueba de no destruir widgets en la segunda
> > llamada al método. Por ejemplo, no llames al .clearContents() a ver si
> > funciona ahora. Si lo hace, entonces el problema puede que no sea de
> > tu código.
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es
> >
>
>
> --
> Claudio Quezada Romegialli
> Ingeniero Ambiental
> (02)7321665 - 81466049
>


-- 
Claudio Quezada Romegialli
Ingeniero Ambiental
(02)7321665 - 81466049



Más información sobre la lista de distribución Python-es