pyqt内存泄漏样式表

时间:2014-10-15 17:37:35

标签: python qt qt4 pyqt pyqt4

pyqt4 | qt 4.8 | linux(open suse)| python 2.7

我有一个关于pyqt和python内存的奇怪行为的简单问题。

我做了一个小测试,一个小部件,在这个小部件上创建了1000个按钮,并将小部件的父级设置为无。

我认为良好的行为是,在小部件(内部有1000个按钮)中,如果我们做widget.setParent(无),qt会破坏它(以及他所有的孩子)。

但如果我们添加一个widget.setStyleSheet(' background-color:green'),似乎qt没有销毁按钮,或者python没有释放内存这些按钮。

一个简单的测试代码。 (良好的行为)

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        widgetCentral = QtGui.QWidget(self)
        for dummy in range(1000):
            beginBtn = QtGui.QPushButton(widgetCentral)
            beginBtn.setText('btn')

        # without this line, the memory is 22mo, if we had this line, the memory fall to 15mo
        #widgetCentral.setParent(None) 

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

现在,与样式表相同的例子

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        widgetCentral = QtGui.QWidget(self)
        widgetCentral.setStyleSheet('background-color:green;')
        for dummy in range(1000):
            beginBtn = QtGui.QPushButton(widgetCentral)
            beginBtn.setText('btn')

        # with or without this line, the memory is 22mo/23mo
        #widgetCentral.setParent(None) 

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

所以它似乎是样式表和python内存的不良行为(垃圾?)

有人对这种行为有所了解吗? 它是一个错误还是一个糟糕的实现?

0 个答案:

没有答案