Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

text alignment in forms with right-to-left text

Hi!!
Recently I've been trying to create Hebrew questionnaires using the form_base, and everything is working beautifully except for the alignment of the text. The text is aligned to the left even though I set the font to hebrew and set the experiment to bi-directional text support in the general properties, and also wrote "set align right" (and set center=no in each label widget) in the form itself. What else should I do?

Comments

  • Hi,

    Right-alignment is not supported for now. I realize that's probably very annoying—if I picture how odd right-aligned text looks to my left-aligned mind.

    I'll give this some thought. In principle, right-alignment would be a new feature, and new features are only included in major releases (which won't be for a while). But if this isn't too hard or risky to implement, I could make an exception. Stay tuned!

    Cheers,
    Sebastiaan

  • Ok, thanks!!

  • Is it possible to align the text to the right if I create a form using an inline script instead of the form_base?

  • I'm afraid not. The alignment is handled by the text-rendering module, so it works the same regardless of how you render text.

    For now, the only way that I can think of to right-align text, is to write your own inline_script. To get you started, the script below is a simple right-aligned text input that accepts a response when you press enter. I think this should work also with Hebrew characters, at least on systems with a Hebrew locale. See the documentation of string.printable.

    import string
    
    c = canvas()
    k = keyboard()
    
    # The top-right of the text
    top, right = -200, 200
    
    response = u''
    while True:
        key, time = k.get_key()
        if key in [u'return', u'enter']:
            break
        if key in string.printable:
            response += key
        elif key == u'space':
            response += u' '
        elif key == u'backspace':
            response = response[:-1]
        c.clear()
        # Use the size of the text (the rectangle that fits around the text) to
        # determine the top-left of the text, to emulate right-alignment.
        w, h = c.text_size(response)
        c.text(response, center=False, x=right-w, y=top)
        c.show()
    
Sign In or Register to comment.