Python 阴影中的文本对齐控件

Python 阴影中的文本对齐控件,python,text,text-alignment,shady,Python,Text,Text Alignment,Shady,我正在使用Shady在屏幕上写一些文本,我想知道控制字符串对齐的最简单方法是什么。据我所知,Shady text对象中的align参数控制段落对齐,但我感兴趣的是控制单行文本的对齐。 本质上,我想复制matplotlib文本函数的水平对齐、垂直对齐和旋转参数的行为。但要做到这一点,我需要估计一旦渲染字符串将占用的面积(以像素为单位)。我能把它从阴凉处弄出来吗?在手册中,它说渲染是在CPU上完成的,然后渲染字符串被推送到GPU,因此它应该是可行的。您正确地认为.text.align和.text.w

我正在使用Shady在屏幕上写一些文本,我想知道控制字符串对齐的最简单方法是什么。据我所知,Shady text对象中的align参数控制段落对齐,但我感兴趣的是控制单行文本的对齐。

本质上,我想复制matplotlib文本函数的水平对齐、垂直对齐和旋转参数的行为。但要做到这一点,我需要估计一旦渲染字符串将占用的面积(以像素为单位)。我能把它从阴凉处弄出来吗?在手册中,它说渲染是在CPU上完成的,然后渲染字符串被推送到GPU,因此它应该是可行的。

您正确地认为
.text.align
.text.wrapping
属性只与文本流逻辑级别的“对齐”有关,即。,多行文字刺激的行如何在读取它们的坐标系中相对彼此对齐(独立于整个刺激在物理上向上的方向)

你所说的旋转属性,“垂直对齐”,甚至你所说的“水平对齐”(如果只有一行文字在使用)都不是特定于文字的属性:它们同样适用于任何矩形面片。因此,要操作的属性是
stim.*
级别属性,而不是
stim.text.*
。具体而言,它们如下所示:

#!/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
您不再需要它