猿问

是否以列表错误形式存储pyQT小部件?

因此,我正在构建管理多个自定义滑块小部件的程序。当前,我有一个slide_container(class),它包含一个滑块对象(类)的列表。然后将这些滑块对象插入到主窗口的布局中。当我仅上下添加和移动滑块的位置时,此方法一直运行良好。但是,当我尝试删除滑块时,一切都变糟了。只要在其中操作了滑块列表(添加,移动或删除滑块),就会在主窗口中调用clear和rebuild函数,如下所示。


def clear_layout(self, layout):

    print "Cleared Layout..."

    while layout.count() > 0:

        item = layout.takeAt(0)

        widget = item.widget()

        if widget is not None:

            widget.deleteLater()


def rebuild_slider_display(self):

    """ Delete the old sliders, then add all the new sliders """

    self.clear_layout(self.slider_layout)



    print "Rebuild layout..."

    print len(self._widgets.widgets)

    for i, widget in enumerate(self._widgets.widgets):

        print widget.slider_name, " ", i

        self.slider_layout.insertWidget(i, widget)

    print "Layout widget count: ", self.slider_layout.count()

当前,我在此行“ self.slider_layout.insertWidget(i,widget)”中遇到此错误


    RuntimeError: wrapped C/C++ object of type SliderWidget has been deleted 

我的直觉是,将实际的窗口小部件存储在窗口小部件容器中是错误的形式。我认为,当我删除小部件的deleteLater()时,发生的事情是它并不只是从列表中删除小部件,而是实际上删除了存储在小部件容器本身中的小部件类。


PIPIONE
浏览 216回答 2
2回答

四季花海

我遇到的问题是清除布局的方式。如下图所示,从底部到顶部清除布局很重要。for i in reversed(range(layout.count())):     layout.itemAt(i).widget().setParent(None)
随时随地看视频慕课网APP

相关分类

Python
我要回答