Observație: Modificarea inițială colorează întregul text în roșu sau verde:
Perla Alba x 01 / 00 (roșu - insuficient)
Perla Alba x 01 / 01 (verde - suficient)
Soluția de mai jos îmbunătățește afișarea astfel:
Elimină zerourile din față numerelor (01 → 1)
Înlocuiește / cu paranteze ( )
Colorează doar numărul din paranteze, lăsând restul textului alb
Rezultat final:
Perla Alba x 1
( 0 )
Perla Alba x 1
( 1 )
def AppendMaterial(self, vnum, count):
slot = self.__MakeSlot()
slot.SetParent(self)
slot.SetPosition(15, self.dialogHeight)
itemImage = self.__MakeItemImage()
itemImage.SetParent(slot)
item.SelectItem(vnum)
itemImage.LoadImage(item.GetIconImageFileName())
thinBoard = self.__MakeThinBoard()
thinBoard.SetPosition(50, self.dialogHeight)
thinBoard.SetSize(191, 20)
# TextLine 1 - text alb
textLine = ui.TextLine()
textLine.SetParent(thinBoard)
textLine.SetFontName(localeInfo.UI_DEF_FONT)
textLine.SetFontColor(1.0, 1.0, 1.0) # Alb
textLine.SetText("%s x %d " % (item.GetItemName(), count))
textLine.SetOutline()
textLine.SetFeather(False)
textLine.SetWindowVerticalAlignCenter()
# TextLine 2 - număr colorat
countLine = ui.TextLine()
countLine.SetParent(thinBoard)
countLine.SetFontName(localeInfo.UI_DEF_FONT)
have_count = player.GetItemCountByVnum(vnum)
if have_count < count:
countLine.SetFontColor(1.0, 0.0, 0.0) # Roșu
else:
countLine.SetFontColor(0.0, 1.0, 0.0) # Verde
countLine.SetText("(%d)" % have_count)
countLine.SetOutline()
countLine.SetFeather(False)
countLine.SetWindowVerticalAlignCenter()
# Poziționare
if localeInfo.IsARABIC():
(x,y) = textLine.GetTextSize()
textLine.SetPosition(x, 0)
else:
textLine.SetPosition(15, -7)
textWidth = textLine.GetTextSize()[0]
countLine.SetPosition(15 + textWidth, -7)
textLine.Show()
countLine.Show()
self.children.append(textLine)
self.children.append(countLine)
self.dialogHeight += 34
self.UpdateDialog()
Comparați cu ce este la voi (am fost nevoit să creez 2 TextLine diferite pentru a realiza această funcționalitate).