I'm guessing that the issue has to do with your use of threading. Firstly, I would suggest that you use Panda3D 1.8 if you aren't already using it, it has improved support for threading. That said, I can still reproduce some issues with your code in Panda3D 1.8.
Secondly, I would strongly advise you to do your setup in the main thread, or add additional synchronisation. The window may appear black if setBackgroundColor is called before the window has been properly started in the main thread, for instance. There are many potential pitfalls to consider when using threading, especially when accessing the same constructs from two threads at once. I would reserve threading for heavy loading operations such as loading models (for which Panda3D has special constructs to do this asynchronously) or for game logic that has little interaction with the graphics pipeline.
As for indicatorValue, you need to actually use the value
and variable
fields to change the default value, as follows:
var = [1]
buttons = [
DirectRadioButton(text='Game 1 ', variable=var, value=[1], scale=0.05, pos=(-0.4,0,0), command=load, extraArgs=[1]),
DirectRadioButton(text='Game 2 ', variable=var, value=[2], scale=0.05, pos=(0,0,0), command=load, extraArgs=[2]),
DirectRadioButton(text='Game 3 ', variable=var, value=[3], scale=0.05, pos=(0.4,0,0), command=load, extraArgs=[3])
]
Whichever button's value matches up with that set in var
will be selected by default. (The reason a list is used instead of an int is because lists are passed by reference, and not by value.