Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am desperatly trying to find some working solution on how to modify the Letter Spacing in a GTK TextView.

I am using python with GTK 3.6 -- It seems that the solution is to somehow use Pango, but I don't understand how. So any working prototype would be greatly appreciated.


share|improve this question

Based on the documentation of GtkTextTags which are used in GtkTextBuffers, there should be a way to stretch or condense text just like underlining text or making it bold.

I have tried this (see example below), but it is not working for the stretching part. I have read somewhere, however, that the font has to support the stretch. So maybe, this is a problem of the font used.

Not really working example of how the documentation tells us how it should work:


from gi.repository import Gtk
import pango

class TextViewWindow:
    def __init__(self):
        self.window = Gtk.Window()
        self.window.set_default_size(400, 400)

        self.textview = Gtk.TextView()
        self.textbuffer = self.textview.get_buffer()

        tag_table = self.textbuffer.get_tag_table()
        stretched_tag = self.textbuffer.create_tag("str", stretch=pango.STRETCH_EXPANDED)

        bold_tag = self.textbuffer.create_tag("bld", weight=pango.WEIGHT_BOLD)

        underline_tag = self.textbuffer.create_tag("und", underline=pango.UNDERLINE_SINGLE)

        self.textbuffer.set_text("Here is some text: normal.\n")
        sob, eob = self.textbuffer.get_bounds()
        self.textbuffer.insert_with_tags_by_name(eob, "Here is some text: expanded.\n", "str")
        sob, eob = self.textbuffer.get_bounds()
        self.textbuffer.insert_with_tags_by_name(eob, "Here is some text: bold.\n", "bld")
        sob, eob = self.textbuffer.get_bounds()
        self.textbuffer.insert_with_tags_by_name(eob, "Here is some text: underlined.\n", "und")


        self.window.connect('destroy', lambda w: Gtk.main_quit())

def main():
    app = TextViewWindow()

if __name__ == "__main__":
share|improve this answer
hi xubuntix, thanks for your detailed explanation. But I am searching specifically for letter spacing, something (it seems) only settable with Pango Attributes. The only thing similar I found:… (but I need it for a TextView, not a label) and here's the documentation for attributes:… (but somehow, pango_attr_letter_spacing_new doesn't seem to exist in python -.-) – wolfv Nov 8 '12 at 12:17

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.