DirectScrolledList
DirectScrolledLists create a list of DirectGuiWidgets. Each object is created individually and can then be added to the list. Some useful methods are:
addItem(item, refresh)
getItemIndexForItemID(self, itemID)
getSelectedIndex(self)
getSelectedText(self)
removeItem(self, item, refresh)
scrollBy(self, delta)
scrollTo(self, index, centered)
scrollToItemID(self, itemID, centered)
selectListItem(self, item)
In the above methods, item is a new item, either a string or a DirectGUI element, and itemID is an arbitrary identification number for each item (but not necessarily a zero-based index number). The itemID for a new item is the return value of addItem(). The centered parameter is a boolean; if true, the list scrolls so that the given index is centered, otherwise it scrolls so that the index is on top of the list.
The items option should either be a list of DirectGUI items or of strings. If strings are used, the itemMakeFunction (and possibly itemMakeExtraArgs) option should be defined to point to a function that will take the supplied string, the index, and the extra args as parameters and return a DirectGUI object to insert into the list. If items is a list of strings and itemMakeFunction is not specified, it will create a list of DirectLabels. itemMakeFunction is redundant if a list of DirectGUI objects is passed into items to begin with.
DirectScrolledLists come with two scroll buttons for navigating through the list. By default, they both start at (0,0,0) relative to the list with size 0, and their positions and size need to be set explicitly. You can set any of the values except relief appearance as you initialize the list:
myScrolledList = DirectScrolledList(incButton_propertyName=value,
decButton_propertyName=value)
incButton scrolls forward through the list; decButton backward. Note that this only works for initialization. To change a property of the scroll buttons later in the program, you must use:
myScrolledList.incButton['propertyName'] = value
myScrolledList.decButton['propertyName'] = value
Unlike the first method, this does not work with NodePath options like position;
use setPos(...)
for that.
For example, the following creates a scrolled list and resizes and moves the buttons appropriately.
myScrolledList = DirectScrolledList(
incButton_pos=(.5, 0, 0), incButton_text="Inc",
decButton_pos=(-.5, 0, 0), decButton_text="Dec")
myScrolledList.incButton['frameSize'] = (0, 0.2, 0, 0.2)
myScrolledList.decButton['frameSize'] = (0, 0.2, 0, 0.2)
myScrolledList.incButton['text_scale'] = .2
myScrolledList.decButton['text_scale'] = .2
Keyword |
Definition |
Value |
---|---|---|
command |
Function called when the list is scrolled |
Function |
extraArgs |
Extra arguments to the function specified in command |
[Extra Arguments] |
text_scale |
Scale of the displayed text |
(sx,sz) |
items |
List of the objects to appear in the ScrolledList |
[DirectGUI items] or [Strings] |
numItemsVisible |
Number of items visible at a time |
Number |
forceHeight |
Forces the height of the list to be a given number |
Number |
itemMakeFunction |
Function that makes DirectGUI items out of strings |
Function |
itemMakeExtraArgs |
Extra arguments to the function in itemMakeFunction |
[Extra Arguments] |
A small example on how to use it:
from direct.directbase import DirectStart
from direct.gui.DirectGui import *
from panda3d.core import *
b1 = DirectButton(text=("Button1", "click!", "roll", "disabled"),
text_scale=0.1, borderWidth=(0.01, 0.01),
relief=2)
b2 = DirectButton(text=("Button2", "click!", "roll", "disabled"),
text_scale=0.1, borderWidth=(0.01, 0.01),
relief=2)
l1 = DirectLabel(text="Test1", text_scale=0.1)
l2 = DirectLabel(text="Test2", text_scale=0.1)
l3 = DirectLabel(text="Test3", text_scale=0.1)
numItemsVisible = 4
itemHeight = 0.11
myScrolledList = DirectScrolledList(
decButton_pos=(0.35, 0, 0.53),
decButton_text="Dec",
decButton_text_scale=0.04,
decButton_borderWidth=(0.005, 0.005),
incButton_pos=(0.35, 0, -0.02),
incButton_text="Inc",
incButton_text_scale=0.04,
incButton_borderWidth=(0.005, 0.005),
frameSize=(0.0, 0.7, -0.05, 0.59),
frameColor=(1,0,0,0.5),
pos=(-1, 0, 0),
items=[b1, b2],
numItemsVisible=numItemsVisible,
forceHeight=itemHeight,
itemFrame_frameSize=(-0.2, 0.2, -0.37, 0.11),
itemFrame_pos=(0.35, 0, 0.4),
)
myScrolledList.addItem(l1)
myScrolledList.addItem(l2)
myScrolledList.addItem(l3)
for fruit in ['apple', 'pear', 'banana', 'orange']:
l = DirectLabel(text=fruit, text_scale=0.1)
myScrolledList.addItem(l)
base.run()