Вы правы, что свойства .text.align
и .text.wrapping
связаны с «выравниванием» только на логическом уровне текстового потока, т. Е. Как выравниваются строки многострочного текстового стимула относительно друг друга в системе координат, в которой они читаются (независимо от того, каким образом физический стимул вверх).
Свойства, о которых вы говорите - вращение, "вертикальный" Выравнивание "и даже то, что вы называете" горизонтальным выравниванием ", если в игре только одна строка текста - это не свойства c, специфичные для текста: они могут одинаково хорошо применяться к любому прямоугольному патчу angular. По этой причине вы хотите манипулировать свойствами stim.*
, а не stim.text.*
. В частности, это .anchor
и .rotation
, как показано здесь:
#!/usr/bin/env python -m Shady shell
import Shady, Shady.Text
w = Shady.World(fullScreenMode=False)
axes = w.Stimulus(Shady.PixelRuler(1000), anchor=Shady.LOWER_LEFT, size=600)
xlabel = w.Stimulus(text='x axis label', x=300, y=0, anchor=Shady.TOP)
ylabel = w.Stimulus(text='y axis label', x=0, y=300, anchor=Shady.BOTTOM, rotation=90)
speed = 30
msg = w.Stimulus(
xy = 300,
rotation = Shady.Integral( lambda t: speed ),
text = 'Change msg.anchor to anything\nbetween [-1,-1] and [+1,+1]\nand see what happens',
text_blockbg = [0, 0, 0, 0.5],
)
Shady.AutoFinish(w)
Где-то в недокументированных функциях Shady.Text
, вероятно, есть какой-то способ заблаговременно оценить, каким будет размер визуализированного текстового стимула. На самом деле, при ближайшем рассмотрении это выглядит как наименее раздражающий способ сделать это - создать массив текстур:
img = Shady.Text.MakeTextImage('hello world')
heightInPixels, widthInPixels, _ = img.shape
Но, надеюсь, при правильном использовании .anchor
вам больше не понадобится это.