The problem is solved partialy (now i can change appearance, pre-initialization helps). TextNode.setText() changes text content but this text is not processed by the methods of PGEntry - until is not very actual, but there is a feeling of constraints.
bad places are commented - ‘— no effect!’(text is not rendered)
from panda3d.core import *
from ... import DirectObject
if __name__=='__main__':
from direct.showbase.ShowBase import ShowBase
app=ShowBase('test_app')
class guiEntry(PGEntry, DirectObject):
def __init__(self):
PGEntry.__init__(self, 'test_entry')
DirectObject.__init__(self)
for st in range(3):
tn=TextNode(self.getName()+str(st))
tn.setTextColor(0.9,0,0,1)
tn.setGlyphScale (0.3)
tn.setText('init txt') # --- no effect!
self.setTextDef (st,tn)
np=aspect2d.attachNewNode(self)
np.setPos(0,0,0)
def wsetup(self, twidth=0.5, num_lines=1, blink_rate=1.5, wactive=1,
wfocus=1, max_chars=100, wstate=PGEntry.SFocus,
wframe=VBase4(0.0,0.5,0.0,0.4)):
PGEntry.setup (self, twidth, num_lines)
self.setFrame(wframe)
self.setBlinkRate (blink_rate)
self.setActive (wactive)
self.setFocus (wfocus)
self.setMaxChars (max_chars)
self.setState(wstate)
def frameStyle(self, wstate=0, ftype=1, fcolor=VBase4(0.2,0.7,0.7,1),
border=VBase2(0.05,0.05)):
fs=self.getFrameStyle(wstate)
fs.setType(ftype)
fs.setColor(fcolor)
fs.setWidth(border)
self.setFrameStyle(0, fs) # обязательно
def setupCusor(self, symb='<'):
ncr=TextNode('cursor')
ncr.setText(symb)
ncr=NodePath(ncr.generate())
ncr.setScale(0.2)
cr_node=self.getCursorDef()
cr_node.node().removeAllChildren()
ncr.reparentTo(cr_node)
def resetCusor(self):
str_end=len(self.getPlainText())
self.setCursorPosition (str_end)
class Marker(PandaNode):
def __init__(self, name='dot', clr=(0.9,0,0,1)):
PandaNode.__init__(self, name)
tmp=CardMaker(name)
tmp.setColor(clr)
tmp.setFrame(-0.01,0.01,-0.01,0.01)
self.addChild(tmp.generate())
mnp=aspect2d.attachNewNode(self)
print 'marker initial position: ', mnp.getPos()
def moveTo(self, obj=None):
if obj is None: return
if obj.isOfType(PandaNode.getClassType()) : obj=NodePath(obj)
mnp=NodePath(self)
mnp.setPos(obj.getPos())
print 'new marker position: ', mnp.getPos()
if __name__=='__main__':
en=guiEntry()
en.wsetup()
en.frameStyle()
en.setupCusor()
en.setText('ha-1') # +++ work
tn=en.getTextDef (0) #PGEntry.SFocus)
tn.setText('ha-2') # --- no effect
tn.setGlyphScale (0.1)# +++ work
en.resetCusor()
mrk=Marker()
mrk.moveTo(en)
#mrk.moveTo(tn) # test
app.run()
[size=59]12.06.2011[/size]