|
|
|
 |
Reply From: |
jgodfrey |
A few thoughts…
If you want both the text label and the value to be rendered as part of a single string in a single Label
component, you’ll need to use a fixed-width font. In that case, each character in the font will take the same amount of space. With that, you could easily calculate the amount of space needed between a given text label and its value to properly align the columns in multiple rows. Without a fixed-width font, it’s probably not possible.
Alternatively, if you could represent the two pieces of data in each row in 2 separate Label
components (1 for the text and 1 for the number), it’d be easier to handle the alignment. In that case, you’d just need to separate the two “columns” of labels appropriately, and then format your values to properly align. The advantage here is that you don’t have to deal with the variable-length text portions also…
Though, no matter what, you’ll have to do some work yourself.
One more thought, though I’m not overly familiar… Perhaps the RichTextLabel
node supports some formatting options that might be useful here?
Ok thanks,
The fixed-width font worked with a bit of code on the strings
I multiplied the length of the value string (“209.7”.length() = 5) with the number of spaces and subtracted the result from a constant number of spaces
so:
“…” - (5 * “.”) = “…”
then you can add “209.7” and you have “…” + str(209.7) = “…209.7”
for those interested, here is the code
var spaces = subTxt(" ", multTxt(" ", str(velocity).length()))
velocity_label.text = "VELOCITY:" + spaces + str(speed)
func multTxt(txt, nb):
var newText = ""
for _i in range(nb):
newText += txt
return newText
func subTxt(txt1, txt2):
var newSize = txt1.length()-txt2.length()
return txt1.substr(0, newSize)
That way, the total string is always the same length.
I have a bit of flickering when the values changes fast but it’s ok, all my players informations are aligned.
leo-pnt | 2020-04-29 19:50