我可以通过deleteLater()将信号分配给旧的析构函数中的新对象

时间:2015-02-09 22:05:00

标签: python event-handling pyqt

我有一个scrollArea,其中有几个按钮和框架 点击按钮

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()

但看起来它已应用于旧(已删除)对象,并且仅在此之后才创建新对象

据我所知Does deleteLater() wait for all pending signals to be delivered?

发出信号时,会将其置于事件队列中。调用deleteLater还会向队列添加一个事件

如何在deleteLater()之后添加将起作用的函数信号 简单的发射不起作用。它使ensureWidgetVisible()可以工作,但是对于旧对象

1 个答案:

答案 0 :(得分:0)

您可以使用sip module

立即删除对象
import sip
...

sip.delete(self.day_objs_list[temp_day]['frame'])