gct*_*gct 1 python layout qt pyqt
我有一个带有QVBoxLayout的QFrame,我将自己的自定义小部件添加到布局中以模拟QListWidget,但项目中包含更多信息/功能.我将小部件添加到布局中并在成员变量中保留引用(这是Python):
self.sv_widgets[purchase.id] = widget
self.vl_seatView.addWidget(widget)
Run Code Online (Sandbox Code Playgroud)
然后当我完成一个项目时,我想从屏幕上删除它并清理引用:
self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
del self.sv_widgets[purchase.id]
Run Code Online (Sandbox Code Playgroud)
不幸的是,小部件仍然显示在屏幕上!我已经检查过,我只将它添加到布局一次(实际上只显示了一个副本),尝试在布局上手动调用update(),但无济于事.这样做的正确方法是什么?
你可以这样做:
import sip # you'll need this import (no worries, it ships with your pyqt install)
sip.delete(self.sv_widgets[purchase.id])
Run Code Online (Sandbox Code Playgroud)
sip.delete(obj) 明确地在相应的C++对象上调用析构函数.removeWidget不会导致调用此析构函数(此时它仍然具有父级)并且del仅标记Python对象以进行垃圾回收.
你可以通过做(相当清洁)来实现同样的目标:
self.vl_seatView.removeWidget(self.sv_widgets[purchase.id])
self.sv_widgets[purchase.id].setParent(None)
del self.sv_widgets[purchase.id]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |