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内存的不良行为(垃圾?)
有人对这种行为有所了解吗? 它是一个错误还是一个糟糕的实现?