我想要这样的东西。若OpenVTK(0)
调用,程序启动,若它调用OpenVTK(1)
,它将重置(但仅重置部分功能)。(elif vect[0]==1:
下面代码的一部分没有这些属性)
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.pushButton2.clicked.connect(lambda: self.OpenVTK(0))
def OpenVTK(self, *vect, clik="", obs=""):
global pr, aa, i, goster
class MouseInteractor(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
global ee, dd # aa
self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
def leftButtonPressEvent(self, obj, event):
if event == "LeftButtonPressEvent":
global bb
bb = self.AddObserver("MouseMoveEvent", self.leftButtonPressEvent)
if event == "LeftButtonReleaseEvent":
self.RemoveObserver(bb)
def on_press(key):
print("{0} pressed".format(key))
if key == Key.esc:
MouseInteractor.dene(vec)
def released(key):
listener.stop()
# Collect events until released
with Listener(on_press=on_press, on_release=released) as listener:
listener.join()
def dene(*vecto):
MainWindow.OpenVTK(self,1)
if vect[0] == 0:
i = -1
etiket.clear()
vec.clear()
distp.clear()
print("you'll see vect: " + str(vect[0]))
print(vect)
# print('Uncut Version')
self.ren = vtk.vtkRenderer()
#print("self is : "+str(self))
self.renWin = self.vtkWidget.GetRenderWindow()
self.renWin.AddRenderer(self.ren)
self.iren = self.renWin.GetInteractor()
self.iren.SetRenderWindow(self.renWin)
reader = vtk.vtkSTLReader()
reader.SetFileName(filename[0])
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
style = MouseInteractor()
style.SetDefaultRenderer(self.ren)
self.iren.SetInteractorStyle(style)
axesActor = vtk.vtkAxesActor()
self.axes = vtk.vtkOrientationMarkerWidget()
self.axes.SetOrientationMarker(axesActor)
self.axes.SetInteractor(self.iren)
self.axes.EnabledOn()
self.axes.InteractiveOn()
self.ren.AddActor(actor)
self.ren.ResetCamera()
self.ren.ResetCameraClippingRange()
self.frame.setLayout(self.vl)
self.iren.Initialize()
self.renWin.Render()
self.iren.Start()
elif(vect[0]==1):
i = -1
print("you'll see vect: " + str(vect))
print(type(vect))
i = -1
etiket.clear()
vec.clear()
distp.clear()
print("you'll see vect: " + str(vect[0]))
print(vect)
# print('Uncut Version')
self.ren = vtk.vtkRenderer()
#print("self is : "+str(self))
self.renWin = self.vtkWidget.GetRenderWindow()
self.renWin.AddRenderer(self.ren)
self.iren = self.renWin.GetInteractor()
self.iren.SetRenderWindow(self.renWin)
reader = vtk.vtkSTLReader()
reader.SetFileName(filename[0])
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
style = MouseInteractor()
style.SetDefaultRenderer(self.ren)
self.iren.SetInteractorStyle(style)
axesActor = vtk.vtkAxesActor()
self.axes = vtk.vtkOrientationMarkerWidget()
self.axes.SetOrientationMarker(axesActor)
self.axes.SetInteractor(self.iren)
self.axes.EnabledOn()
self.axes.InteractiveOn()
self.ren.AddActor(actor)
self.ren.ResetCamera()
self.ren.ResetCameraClippingRange()
self.frame.setLayout(self.vl)
self.iren.Initialize()
self.renWin.Render()
self.iren.Start()
else:
del vect[0][0]
# print('Cut Version')
但问题是,尽管self.pushButton2.clicked.connect(lambda: self.OpenVTK(0))
可以正常工作并正确执行if vect[0] == 0:
块,但当我在dene()
函数中调用OpenVTK(1)
时,它会出现多个错误,如
2021-10-03 15:36:47.806 (1009.163s) [ ]vtkWin32OpenGLRenderWin:217 ERR| vtkWin32OpenGLRenderWindow (000002019A558A50): wglMakeCurrent failed in MakeCurrent(), error: The requested resource is in use.
我理解这个错误是因为我无法释放缓冲区源。但是我把if vect[0] == 0:
块的代码复制到了elif vect[0]=1
总的来说,我认为,如果我能从MainWindow
的__init__
调用OpenVTK()
,它工作得很好,但我不知道怎么做。
新建编辑:我删除了dene()
函数,并尝试从on_press
调用OpenVTK()
。但在本次编辑中,我犯了以下错误:
AttributeError: 'MainWindow' object has no attribute 'vtkWidget'
。尽管从上面我们可以看到MainWindow
确实具有vtkWidget
属性
def leftButtonPressEvent(self, obj, event):
global data, vec, i, noktagoster, goster, x, y, mousehareket, clickPosold, selet, pointposOld, arb, distp
if event == "LeftButtonPressEvent":
global bb
bb = self.AddObserver("MouseMoveEvent", self.leftButtonPressEvent)
if event == "LeftButtonReleaseEvent":
self.RemoveObserver(bb)
def on_press(key):
print("{0} pressed".format(key))
if key == Key.esc:
#MouseInteractor.dene(vec)
MainWindow.OpenVTK(MainWindow(),0)
def released(key):
listener.stop()
# Collect events until released
with Listener(on_press=on_press, on_release=released) as listener:
listener.join()
正如前面提到的错误(
AttributeError: 'MainWindow' object has no attribute 'vtkWidget'
)一样,vtkWidget
没有定义。您正在使用未首先初始化的此属性:
初始化
self.vtkWidget
,然后有望解决错误相关问题 更多 >
编程相关推荐