Disney Pinball: real physics and cool settings
VR Boxing: a good way to destroy VR helmets.
Some experiments done by a student with spherical harmonics.

Panda3D Manual: DirectCheckButton

DirectCheckButtons are similar to buttons, except they represent a binary state that is toggled when it is clicked. Their usage is almost identical to regular buttons, except that the text area and box area can be modified separately.

Keyword Definition Value
text_scale Scale of the displayed text (sx,sz)
indicatorValue The initial boolean state of the checkbox 0 or 1
boxImage Image on the checkbox Image Path
boxImageColor Color of the image on the box (R,G,B,A)
boxImageScale Scale of the displayed image Number
boxPlacement Position of the box relative to the text area ‘left’,’right’
boxRelief Relief appearance of the checkbox DGG.SUNKEN or DGG.RAISED
boxBorder Size of the border around the box Number
command Command the button performs when clicked(0 or 1 is passed, depending on the state) Function
extraArgs Extra arguments to the function specified in command [Extra Arguments]
commandButtons Which mouse button must be clicked to do the command LMB, MMB, or RMB
rolloverSound The sound made when the cursor rolls over the button Sound File Path
clickSound The sound made when the cursor clicks on the button Sound File Path
pressEffect Whether or not the button sinks in when clicked <0 or 1>


import direct.directbase.DirectStart
from direct.gui.OnscreenText import OnscreenText 
from direct.gui.DirectGui import *
from panda3d.core import *
# Add some text
bk_text = "This is my Demo"
textObject = OnscreenText(text = bk_text, pos = (0.95,-0.95), 
scale = 0.07,fg=(1,0.5,0.5,1),align=TextNode.ACenter,mayChange=1)
# Callback function to set  text 
def setText(status):
		bk_text = "Checkbox Selected"
		bk_text = "Checkbox Not Selected"
# Add button
b = DirectCheckButton(text = "CheckButton" ,scale=.05,command=setText)
# Run the tutorial

Programmatically changing the indicatorValue

If you programatically want to change the checkbutton's indicatorValue, you need to call setIndicatorValue afterwards to update the checkbutton, like:

b["indicatorValue"] = True

boxImage and other box* keywords

Just as DirectButton may be passed a 4-tuple of values to be used in the four button states, the box* keyword arguments may be supplied with multiple entries to denote the unchecked and checked state. To supply arguments to be used in the two states of the checkbox, construct a 3-tuple of values with a 'None' in the final entry, i.e. (unchecked, checked, None). For example, to set two different images for the unchecked and checked states:

boxImage = ("pathToDisabledImage.jpg", "pathToEnabled.jpg", None)