def buildUI(self): self.ui = Ui_MainView() self.ui.setupUi(self) # connect signals to methods self.ui.actionMasking.changed.connect(self.onMasking) self.ui.actionAutoCamera.changed.connect(self.onSetCameraParams) self.ui.actionFineRegistration.triggered.connect(self.onFineRegistration) # Replace vertical layout placeholder with a QVTKRenderWindowInteractor self.ui.qvtkWidget = QVTKRenderWindowInteractor(self.ui.centralwidget) self.ui.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget")) imgDims = self.model.bgImage.GetDimensions() self.ui.qvtkWidget.setMinimumWidth(imgDims[0]) self.ui.qvtkWidget.setMaximumWidth(imgDims[0]) self.ui.qvtkWidget.setMinimumHeight(imgDims[1]) self.ui.qvtkWidget.setMaximumHeight(imgDims[1]) self.ui.horizontalLayout.addWidget(self.ui.qvtkWidget) # Add this render window to the model self.model.setRenWin(self.ui.qvtkWidget.GetRenderWindow()) self.model.renWin = self.ui.qvtkWidget.GetRenderWindow() # Replace default interactor style to send messages to controller self.iren = self.ui.qvtkWidget.GetRenderWindow().GetInteractor() self.iren.SetInteractorStyle(MainViewInteractorStyle(self.mainCtrl))
class MainView(QtGui.QMainWindow): # properties to read/write widget values @property def masking(self): return self.ui.actionMasking.isChecked() @masking.setter def masking(self, value): self.ui.actionMasking.setChecked(value) @property def autoCamera(self): return self.ui.actionAutoCamera.isChecked() @autoCamera.setter def autoCamera(self, value): self.ui.actionAutoCamera.setChecked(value) def __init__(self, model, mainCtrl): self.model = model self.mainCtrl = mainCtrl super(MainView, self).__init__() self.buildUI() # Set up controller update thread self.mainCtrl.bgUpdater.VTK_updated.connect(self.renderVTK) # register func with model for future model update announcements self.model.subscribe_update_func(self.updateUiFromModel) def buildUI(self): self.ui = Ui_MainView() self.ui.setupUi(self) # connect signals to methods self.ui.actionMasking.changed.connect(self.onMasking) self.ui.actionAutoCamera.changed.connect(self.onSetCameraParams) self.ui.actionFineRegistration.triggered.connect(self.onFineRegistration) # Replace vertical layout placeholder with a QVTKRenderWindowInteractor self.ui.qvtkWidget = QVTKRenderWindowInteractor(self.ui.centralwidget) self.ui.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget")) imgDims = self.model.bgImage.GetDimensions() self.ui.qvtkWidget.setMinimumWidth(imgDims[0]) self.ui.qvtkWidget.setMaximumWidth(imgDims[0]) self.ui.qvtkWidget.setMinimumHeight(imgDims[1]) self.ui.qvtkWidget.setMaximumHeight(imgDims[1]) self.ui.horizontalLayout.addWidget(self.ui.qvtkWidget) # Add this render window to the model self.model.setRenWin(self.ui.qvtkWidget.GetRenderWindow()) self.model.renWin = self.ui.qvtkWidget.GetRenderWindow() # Replace default interactor style to send messages to controller self.iren = self.ui.qvtkWidget.GetRenderWindow().GetInteractor() self.iren.SetInteractorStyle(MainViewInteractorStyle(self.mainCtrl)) def onMasking(self): self.mainCtrl.changeMasking(self.masking) def onSetCameraParams(self): self.mainCtrl.changeAutoCamera(self.autoCamera) def onFineRegistration(self): self.mainCtrl.register() def updateUiFromModel(self): self.masking = self.model.masking def renderVTK(self): self.ui.qvtkWidget.GetRenderWindow().Render() def closeEvent(self, event): self.mainCtrl.bgUpdater.running = False self.mainCtrl.bgUpdater.wait() self.mainCtrl.bgUpdater.terminate() self.mainCtrl.bgUpdater.wait() self.iren.TerminateApp() QtGui.qApp.processEvents() super(MainView, self).closeEvent(event) def show(self): """ This adds to the default show function to initialize the interactor after MainView is shown to avoid a segfault caused if qvtkWidget's interactor is initialied before the window is shown. """ super(MainView, self).show() self.iren.Initialize()