Modules:Python
From Slicer Wiki
Home < Modules:Python
Basics of building a Python GUI module for Slicer3
Python GUI modules all subclass ScriptedModuleGUI and override selected methods. Below is a full example of a gradient aniostropic diffusion module.
from SlicerScriptedModule import ScriptedModuleGUI
from Slicer import slicer
vtkKWScale_ScaleValueChangedEvent = 10001
vtkKWScale_ScaleValueStartChangingEvent = 10002
vtkSlicerNodeSelectorWidget_NodeSelectedEvent = 11000
vtkKWPushButton_InvokedEvent = 10000
class PythonGADScriptedModuleGUI(ScriptedModuleGUI):
def __init__(self):
ScriptedModuleGUI.__init__(self)
def RemoveMRMLNodeObservers(self):
pass
def RemoveLogicObservers(self):
pass
def AddGUIObservers(self):
pass
def RemoveGUIObservers(self):
pass
def ProcessGUIEvents(self,caller,event):
pass
def Apply(self):
if not self.GetScriptedModuleNode():
slicer.Application.ErrorMessage("No input ScriptedModuleNode found")
return
slicer.Application.InformationMessage("Done applying GradientAnisotropicDiffusion.")
def UpdateMRML(self):
pass
def UpdateGUI(self):
pass
def ProcessMRMLEvents(self,caller,event):
pass
def BuildGUI(self):
return
self.GetUIPanel().AddPage("GradientAnisotropicDiffusionFilter","GradientAnisotropicDiffusionFilter","")
pageWidget = self.GetUIPanel().GetPageWidget("GradientAnisotropicDiffusionFilter")
helpText = "Flex, dude!"
aboutText = "This work is supported by NA-MIC, NAC, BIRN, NCIGT, and the Slicer Community. See http://www.slicer.org for details."
self.BuildHelpAndAboutFrame(pageWidget,helpText,aboutText)
moduleFrame = slicer.vtkSlicerModuleCollapsibleFrame()
moduleFrame.SetParent(self.GetUIPanel().GetPageWidget("GradientAnisotropicDiffusionFilter"))
moduleFrame.Create()
moduleFrame.SetLabelText("Gradient Anisotropic Diffusion Filter")
moduleFrame.ExpandFrame()
widgetName = moduleFrame.GetWidgetName()
pageWidgetName = self.GetUIPanel().GetPageWidget("GradientAnisotropicDiffusionFilter").GetWidgetName()
slicer.TkCall("pack %s -side top -anchor nw -fill x -padx 2 -pady 2 -in %s" % (widgetName,pageWidgetName))
def TearDownGUI(self):
return
if self.GetUIPanel().GetUserInterfaceManager():
pageWidget = self.GetUIPanel().GetPageWidget("GradientAnisotropicDiffusionFilter")
self.GetUIPanel().RemovePage("GradientAnisotropicDiffusionFilter")