Как настроить выравнивание, или как найти документацию по PyGObject

Я пытаюсь выровнять текст по правому краю в CellRenderer. Через несколько поисков я нашел два подхода, но они не работают. При выделении жирным шрифтом вам нужно сначала включить эту функцию, поэтому я предполагаю, что мне также нужно включить настройку выравнивания, но я не нашел, как это сделать. Это работает без исключения:

r = Gtk.CellRendererText()
r.props.width_chars = 10
r.set_property('alignment', Pango.Alignment.RIGHT) # no effect
r.props.alignment = Pango.Alignment.RIGHT # no effect
r.props.weight_set = True # not really needed
r.props.weight = Pango.Weight.BOLD # works, output is bold

Это то, что я догадался из жирного примера, но НЕ работает:

 r.props.alignment_set = True

Ошибка: объект gi._gobject.GProps не имеет атрибута alignment_set.

Глядя на эти ссылки, я ничего не нахожу в GProps:

Этот ресурс говорит что-то о выравнивании, но мне непонятно, как преобразовать этот код C в Python/GObject:

Мой вопрос заключается в том, как решить эту проблему, где находится справочное руководство для этого сообщения об ошибке PyGObject или как мне кодировать выравнивание по правому краю?


Обновление: в настоящее время я просматриваю этот аналогичный вопрос SO для подсказок.

Что касается комментария TingPing, я просмотрел метод set_alignment() и попробовал следующее:

r.set_alignment(Pango.Alignment.RIGHT) # error: set_alignment() takes exactly 3 arguments (2 given)
r.set_alignment(200, 0) # no error, no effect

кроме того, этот метод, по-видимому, предназначен для создания отступов в пикселях слева, что мне не нужно: выровняйте текст справа от пространства ячейки.


Обновлять:

Возможно, приведенный выше код хорош, но, возможно, CellRenderer() не имеет встроенной ширины, не имеет лишнего пространства, чтобы поместить его слева от содержимого. Я подумал об этом из-за того, что подумал о простом заполнении слева моего числового содержимого ячейки пробелами. Затем мне нужно определиться с максимальной длиной поля. Возможно, CellRenderer не «знает» о длине поля по умолчанию. Я добавил настройку в .props.width_chars, но это, к сожалению, не привело к выравниванию по правому краю.


person Roland    schedule 07.03.2016    source источник
comment
Вам никогда не нужно трогать свойства *_set. В противном случае ваше использование выглядит нормально, метод set_alignment() существует, поскольку он унаследован от своего родителя, так что стоит попробовать.   -  person TingPing    schedule 08.03.2016
comment
@TingPing Я попробовал ваше предложение, посмотрите обновление по моему вопросу. Спасибо за ваши комментарии. У меня такое ощущение, что мой опубликованный код должен работать, но что-то еще в моем приложении идет не так... Мне жаль, что я не нашел пример PyGObject и align-right...   -  person Roland    schedule 08.03.2016


Ответы (1)


С помощью этого примера C я попытался выполнить выравнивание по правому краю:

r.props.xalign = 1.0

и это работает! xalign — это доля свободного места 0..1.0, которое нужно поместить слева от текста. Значение 0,5 будет центрировать текст.

person Roland    schedule 10.03.2016
comment
Это действительно помогло мне, в том числе и в ruby-gtk. xalign работает и там. Я пробовал set_alignment(), но это делает что-то другое. - person shevy; 05.02.2021