Pregunta

Tengo un QFrame con un QVBoxLayout y yo estoy añadiendo mis propios widgets personalizados para el diseño para simular un QListWidget pero con más información / funcionalidad en los artículos. Añado el widget a la disposición y mantener una referencia en una variable miembro (esto es Python):

 self.sv_widgets[purchase.id] = widget                
 self.vl_seatView.addWidget(widget)

A continuación, cuando he terminado con un artículo que quiero para quitarlo de la pantalla y limpiar la referencia:

self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
del self.sv_widgets[purchase.id]

Por desgracia, el widget se sigue mostrando en la pantalla! He comprobado y yo sólo estoy añadiendo a la disposición una vez (y de hecho sólo se muestra una copia), intentado manualmente llamando a update () en el diseño, pero fue en vano. ¿Cuál es la forma correcta de hacer esto?

¿Fue útil?

Solución

Usted puede hacer esto:

import sip # you'll need this import (no worries, it ships with your pyqt install)
sip.delete(self.sv_widgets[purchase.id])

sip.delete(obj) explícitamente llama al destructor en el objeto correspondiente C ++. removeWidget no causa este destructor que se llama (todavía tiene un padres en ese momento) y del sólo marca el Python objeto para la recolección de basura.

Puede conseguir el mismo mediante la práctica (además probablemente más limpio):

self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
self.sv_widgets[purchase.id].setParent(None)
del self.sv_widgets[purchase.id]

Otros consejos

También puede utilizar self.sv_widgets [purchase.id] .deleteLater ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top