psychopy.org | Reference | Downloads | Github

Align text with the centre of a textbox (TextBox2)

How can I align a TextBox2 stimulus to be in the center of a textbox? I tried changing the alignment attribute, but it had no effect (for Psychopy v20201.1.3). Here is my example code:

from psychopy import visual, logging
from psychopy.hardware import keyboard

win = visual.Window(
    size=[1536, 864], fullscr=True, screen=0,
    winType='pyglet', allowGUI=False, allowStencil=False,
    monitor='testMonitor', color=[0,0,0], colorSpace='rgb',
    blendMode='avg', useFBO=True,
    units='height')

textbox = visual.TextBox2(
     win, text='Hallo', font='Arial',
     pos=(0, 0), letterHeight=0.05,
     size=(0.9, 0.2), borderWidth=2.0,
     color='white', colorSpace='rgb',
     opacity=1,
     bold=False, italic=False,
     lineSpacing=1.0,
     padding=None,
     anchor='center',
     fillColor=None, borderColor='blue',
     flipHoriz=False, flipVert=False,
     editable=False,
     name='instr1_textbox',
     autoLog=True,
)
key_resp = keyboard.Keyboard()

pos = [(0,0), (0.2, 0.2), (-0.2, 0.2), (-0.2, -0.2), (0.2, -0.2)]
aligns = ['center', 'left']

textbox.autoDraw = True

for  this_pos in pos:
    for this_align in aligns:
        textbox.pos=this_pos
        textbox.alignment=this_align
        textbox.text=str(this_pos) + ' ' + this_align
        
        while not key_resp.getKeys():
            win.flip()

I think I found a solution for some use cases: I just set textbox.size=[None, None].

That doesn’t align the text in the center of the textbox, but it fits the bounding box around the text, so that it has the same effect. However, I would still be interested if someone knows how to align the text in the center of a textbox if the bounding box is set at a fixed size, e.g. (0.9, 0.2) as in my example above.

This is something we’re working on and intending to add! It’s one of the things we need to sort out before taking the “beta” sticker off of TextBox.

1 Like

Thank you for your reply!