Python 如何避免马雅维管道污染?

Python 如何避免马雅维管道污染?,python,pyqt,mayavi,Python,Pyqt,Mayavi,下面是一些最基本的代码,充分展示了我所说的“管道污染”。每次按下“绘制”按钮时,MayaviScene编辑器(通过图中左上角的按钮访问)都会更新图,但也会创建一个新场景的“壳”,该壳在管道中徘徊(如所附图像所示) 我担心在我更复杂的项目中,这一堆会产生不利影响 有人可以指导我如何最好地设置这个马雅维场景,使其在没有过度积累的情况下简单地更新吗?我已经阅读了大量的在线资料,但仍然不理解开发人员的逻辑 原因可能是draw内部函数中包含Mayavi_Scene().update_Scene()的行。

下面是一些最基本的代码,充分展示了我所说的“管道污染”。每次按下“绘制”按钮时,MayaviScene编辑器(通过图中左上角的按钮访问)都会更新图,但也会创建一个新场景的“壳”,该壳在管道中徘徊(如所附图像所示)

我担心在我更复杂的项目中,这一堆会产生不利影响

有人可以指导我如何最好地设置这个马雅维场景,使其在没有过度积累的情况下简单地更新吗?我已经阅读了大量的在线资料,但仍然不理解开发人员的逻辑


原因可能是
draw
内部函数中包含
Mayavi_Scene().update_Scene()
的行。每次调用
draw
,它都会创建一个新的
Mayavi_场景
。下面的
P1
类将
draw
定义为直接访问
self.viz1
的方法。我还将对
draw
的引用替换为对
self.draw

class P1(QtGui.QWidget):
    # data starts out empty, wait for user input (below, via 'draw()'):
    x = []
    y = []
    z = []

    def __init__(self, parent=None):
        super(P1, self).__init__(parent)
        layout = QtGui.QGridLayout(self)
        layout.setContentsMargins(20,20,20,20)
        layout.setSpacing(10)

        self.viz1 = Mayavi_Scene()
        self.ui1 = self.viz1.edit_traits(parent=self, kind='subpanel').control
        layout.addWidget(self.ui1, 0, 0, 1, 1)

        # button to draw data:
        self.btn1 = QtGui.QPushButton('Draw',self)
        # Connect the widget's draw method and the button
        self.connect(self.btn1, QtCore.SIGNAL('clicked()'), self.draw)
        layout.addWidget(self.btn1, 1, 0, 1, 1)
        self.btn1.show()

    def draw(self): #a sample user input, could have been a custom data file, etc.
        P1.x = np.random.random((100,))
        P1.y = np.random.random((100,))
        P1.z = np.random.random((100,))
        # Update the current scene without creating a new one.
        self.viz1.update_scene()

原因可能是
draw
内部函数中包含
Mayavi_Scene().update_Scene()
的行。每次调用
draw
,它都会创建一个新的
Mayavi_场景
。下面的
P1
类将
draw
定义为直接访问
self.viz1
的方法。我还将对
draw
的引用替换为对
self.draw

class P1(QtGui.QWidget):
    # data starts out empty, wait for user input (below, via 'draw()'):
    x = []
    y = []
    z = []

    def __init__(self, parent=None):
        super(P1, self).__init__(parent)
        layout = QtGui.QGridLayout(self)
        layout.setContentsMargins(20,20,20,20)
        layout.setSpacing(10)

        self.viz1 = Mayavi_Scene()
        self.ui1 = self.viz1.edit_traits(parent=self, kind='subpanel').control
        layout.addWidget(self.ui1, 0, 0, 1, 1)

        # button to draw data:
        self.btn1 = QtGui.QPushButton('Draw',self)
        # Connect the widget's draw method and the button
        self.connect(self.btn1, QtCore.SIGNAL('clicked()'), self.draw)
        layout.addWidget(self.btn1, 1, 0, 1, 1)
        self.btn1.show()

    def draw(self): #a sample user input, could have been a custom data file, etc.
        P1.x = np.random.random((100,))
        P1.y = np.random.random((100,))
        P1.z = np.random.random((100,))
        # Update the current scene without creating a new one.
        self.viz1.update_scene()

你太棒了。非常感谢你!你太棒了。非常感谢你!