我有一个滚动区,那里有几个按钮和框架点击按钮
self.connect(self.day_btn, QtCore.SIGNAL("toggled(bool)"), self.show_days)
我调用一个函数,尝试使用deleteLater()删除scrollArea中的所有对象
def show_days(self):
if self.day_btn.isChecked():
if self.day_objs_list:
for temp_day in self.day_objs_list:
self.day_objs_list[temp_day]['frame'].deleteLater()
然后在此函数中创建新的帧,并需要应用self.scrollArea.ensureWidgetVisible()
但看起来它被应用于旧的(删除的)对象,并且只有在那之后它才创建新的对象
正如我从deleteLater()中了解到的那样,是否等待所有待处理的信号被传递?
当您发出信号时,它会被放置在事件队列中。调用deleteLater还会向队列添加一个事件
如何添加在deleteLater()之后工作的函数信号简单的发射不起作用。它使ensureWidgetVisible()工作,但对于旧对象
您可以使用sip模块立即删除对象:
import sip
...
sip.delete(self.day_objs_list[temp_day]['frame'])