load model, change background color, model color,...

I wrote this awhile ago to test models under different lighting conditions.

import direct.directbase.DirectStart
import sys, math
from direct.showbase.DirectObject import DirectObject
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.task.Task import Task





class World (DirectObject):
    def __init__(self):
        
        #set initial RGBA values
        self.R=0.00
        self.G=0.00
        self.B=0.00
        self.A=0.00
        
        #set values for camera movement 
        self.angledegrees = 0 
        self.angleradians = 0
        self.camDist = 10
        self.D2M = 1
        

        
        #0 or 1, change the attribute's values or not
        self.setColor = 0
        self.setColorScale = 0
        self.setBackgroundColor = 0
        self.setAmbientLightColor = 0
        self.setSpotLightColor = 0
        

        #set up a dummy object
        self.object2NP = render.attachNewNode("Dummy Node Name")
        self.object2NP.setPos(0,0,0) 
        self.object2NP.setColor (1,1,0,1)
        self.object2NP.setTransparency(TransparencyAttrib.MAlpha)         
 
        #set the camera
        #base.oobe()
        base.disableMouse()
        base.camera.reparentTo(render)
        base.camera.setPos(0,-10,1)

        #set up lights
        self.alight = AmbientLight('alight')
        self.alight.setColor(VBase4(1, 1, 1, 1))
        self.alnp = render.attachNewNode(self.alight)
        render.setLight(self.alnp)
        
        self.slight = Spotlight('sparky')
        self.slight.setColor(Vec4(1,1,1,1))
        lens = PerspectiveLens()
        self.slight.setLens(lens)
        self.slightNP = render.attachNewNode(self.slight)
        self.slightNP.setPos(0,-10,0)
        self.slightNP.setHpr(0,0,0)
        render.setLight(self.slightNP)
        
        self.accept("escape", sys.exit)
        self.accept("arrow_up", self.zoomIn)
        self.accept("arrow_down", self.zoomOut)
        self.accept("arrow_left", self.orbitL)
        self.accept("arrow_left-up", self.orbitoff)
        self.accept("arrow_right", self.orbitR)
        self.accept("arrow_right-up", self.orbitoff)  
        self.accept("p", self.getWidgetTransformsF)     
        
        
        
        
        #input box , what model is loaded
        self.fileLoaderButton = DirectEntry(pad =(0.05,0.05), pos=(0.3, 0, 0.5), text = "" ,scale=.07,command=self.setFileNameF, initialText="Enter file name of the model.egg", numLines = 1,focus=0, focusInCommand=self.clearText)

        #checkboxes to determine what attributes are affected
        self.setColorButton = DirectCheckButton(pos=(-1.14333, 0, 0.64),  
                        text = "setColor            " ,scale=.06,command=self.setColorF)
        self.setColorScaleButton = DirectCheckButton(pos=(-1.08333, 0, 0.56),
                        text = "setColorScale       " ,scale=.06,command=self.setColorScaleF)
        self.setBackgroundColorButton = DirectCheckButton(pos=Point3(-1.01333, 0, 0.483333),
                        text = "setBackgroundColor  " ,scale=.06,command=self.setBackgroundColorF)
        self.setAmbientLightColorButton= DirectCheckButton(pos=Point3(-1, 0, 0.396667),
                        text = "setAmbientLightColor" ,scale=.06,command=self.setAmbientLightColorF)  
        self.setSpotLightColorButton= DirectCheckButton(pos=Point3(-1, 0, 0.306667),
                        text = "setSpotLightColor" ,scale=.06,command=self.setSpotLightColorF)  

        #label for sliders
        self.rLabel = DirectLabel(text = "r", pos = Point3(0.0533333, 0, -0.54), scale = 0.09, text_bg = (1,1,1,1), text_fg=(1,0,0,1))
        self.gLabel = DirectLabel(text = "g", pos = Point3(-0.233333, 0, -0.63), scale = 0.09, text_bg = (1,1,1,1), text_fg=(0,1.0,0,1))
        self.bLabel = DirectLabel(text = "b", pos = Point3(0.0866667, 0, -0.74), scale = 0.09, text_bg = (1,1,1,1), text_fg=(0,0,1,1))
        self.aLabel = DirectLabel(text = "a", pos = Point3(0.0933333, 0, -0.89), scale = 0.09, text_bg = (1,1,1,1), text_fg=(0,0,0,1))
        #set up sliders
        self.Rslider=DirectSlider(range=(0,1), value=1, pageSize=0.05, command=self.setRF, scale = 0.55, pos=Point3(0.683333, 0, -0.54))
        self.Gslider=DirectSlider(range=(0,1), value=1, pageSize=0.05, command=self.setGF, scale = 0.55, pos=Point3(0.363333, 0, -0.623333))
        self.Bslider=DirectSlider(range=(0,1), value=1, pageSize=0.02, command=self.setBF, scale = 0.55, pos=Point3(0.693333, 0, -0.706667))
        self.Aslider=DirectSlider(range=(0,1), value=1, pageSize=0.02, command=self.setAF, scale = 0.55, pos=Point3(0.69, 0, -0.876667))

        #setup output box  
        self.rgbaValuesLabel = DirectLabel(text = " ", pos = (-1, 0, -0.73), scale = 0.07, text_fg=(1,0.0,0.0,1))

        #add print button to output RBGA value 
        self.printButton = DirectButton(pad=(0.04,0.04), text = ("Print the values", "PRINTING", "Print the values", "disabled"),pos=Point3(-1, 0, -0.85), scale=.09,command=self.printF)



    def getWidgetTransformsF(self):
        for child in aspect2d.getChildrenAsList():
            print child, "  position = ", child.getPos()  
            print child, "  scale = ", child.getScale()  
    

    def setColorF (self, status):
        if(status):
            self.setColor = 1
        else:
            self.setColor = 0
            
    def setColorScaleF (self, status):
        if(status):
            self.setColorScale = 1
        else:
            self.setColorScale = 0
            
    def setBackgroundColorF (self, status):
        if(status):
            self.setBackgroundColor = 1
        else:
            self.setBackgroundColor = 0
            
    def setAmbientLightColorF (self, status):
        if(status):
            self.setAmbientLightColor = 1
        else:
            self.setAmbientLightColor = 0
    def setSpotLightColorF (self, status):
        if(status):
            self.setSpotLightColor = 1
        else:
            self.setSpotLightColor = 0
        
    def clearText(self):
        self.fileLoaderButton.enterText('')
    
    def setFileNameF(self, textEntered):
        try:
            self.object2NP = loader.loadModel(textEntered)
            self.object2NP.reparentTo(render)
            self.object2NP.setPos(0,0,0) 
            self.object2NP.setColor (1,1,0,1)
            self.object2NP.setTransparency(TransparencyAttrib.MAlpha) 
        except AttributeError:
            self.fileLoaderButton.enterText('model not found')

        
    def orbitR(self):
        taskMgr.add(self.SpinCameraRTask, "SpinTask")
    def orbitL(self):
        taskMgr.add(self.SpinCameraLTask, "SpinTask")
    def orbitoff(self):
        taskMgr.remove("SpinTask")
    def SpinCameraLTask(self, task):
        base.camera.setHpr(base.camera.getH()-1, 0, 0)  
        self.angleradians = base.camera.getH() * (math.pi / 180.0)
        base.camera.setPos(self.camDist*math.sin(self.angleradians),-self.camDist*math.cos(self.angleradians),1)
        return Task.cont
    def SpinCameraRTask(self, task):
        base.camera.setHpr(base.camera.getH()+1, 0, 0)  
        self.angleradians = base.camera.getH() * (math.pi / 180.0)
        base.camera.setPos(self.camDist*math.sin(self.angleradians),-self.camDist*math.cos(self.angleradians),1)
        return Task.cont      
    def zoomIn(self):
        radian = base.camera.getH()*math.pi/180.0
        dx = self.D2M*-math.sin(radian)
        dy = self.D2M*+math.cos(radian)
        base.camera.setPos(Vec3(base.camera.getX()+dx,base.camera.getY()+dy,1))
        self.camDist = self.camDist -1
    def zoomOut(self):
        radian = base.camera.getH()*math.pi/180.0
        dx = self.D2M*+math.sin(radian)
        dy = self.D2M*-math.cos(radian)
        base.camera.setPos(Vec3(base.camera.getX()+dx,base.camera.getY()+dy,1))
        self.camDist = self.camDist +1    
        


        
    def setRF(self):
        self.R = self.Rslider['value']
        self.update()  
    def setGF(self):
        self.G = self.Gslider['value']
        self.update () 
    def setBF(self):
        self.B = self.Bslider['value']
        self.update () 
    def setAF(self):
        self.A = self.Aslider['value']
        self.update   ()           

    def printF(self):
        #print "setColor(%.2f, %.2f, %.2f, %.2f)" % (self.R, self.G, self.B, self.A) 
        print "setColor(%s)" % (self.object2NP.getColor())
        print "setColorScale(%s)" % (self.object2NP.getColorScale())
        print "setBackgroundColor(%s)" % (base.getBackgroundColor())
        print "ambientlight    setColor(%s)" % (self.alight.getColor())
        print "spotlight       setColor(%s)" % (self.slight.getColor())
            
    def update(self):
        self.rgbaValuesLabel ['text'] = "(%.2f, %.2f, %.2f, %.2f)" % (self.R, self.G, self.B, self.A)    
         
        if self.setColor == 1 :
            self.object2NP.setColor(self.R, self.G, self.B, self.A)
        if self.setColorScale == 1 :
            self.object2NP.setColorScale(self.R, self.G, self.B, self.A)
        if self.setBackgroundColor == 1 :
            base.setBackgroundColor(self.R, self.G, self.B, self.A)
        if self.setAmbientLightColor == 1 :
            self.alight.setColor(VBase4(self.R, self.G, self.B, self.A))
        if self.setSpotLightColor == 1 :
            self.slight.setColor(VBase4(self.R, self.G, self.B, self.A))
        




w = World()
run()