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