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