Я пытаюсь выровнять текст по правому краю в 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
, но это, к сожалению, не привело к выравниванию по правому краю.
*_set
. В противном случае ваше использование выглядит нормально, методset_alignment()
существует, поскольку он унаследован от своего родителя, так что стоит попробовать. - person TingPing   schedule 08.03.2016