Как сделать так, чтобы значки в IconView были распределены равномерно? - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть gtk.IconView с несколькими иконками в нем.Иногда я изменю размер окна, чтобы увидеть больше значков.Когда я делаю это, генерируемое дополнительное пространство не распределяется равномерно между всеми столбцами.Вместо этого все становится справа, пока не будет достаточно места для нового столбца.

Я не вижу ничего в документации , которая позволила бы мне сделать это автоматически.Нужно ли проверять сигналы изменения размера, а затем вручную устанавливать интервалы между столбцами и строками?Если да, какой сигнал изменения размера я использую.

Вот изображение того, что я имею в виду.Я пометил дополнительное пространство красным.

enter image description here

Это то, что я хотел бы видеть (конечно, с пропусками, фактически расставленными равномерно, в отличие от моей бедной MS Paintработа).

enter image description here

Ответы [ 3 ]

1 голос
/ 24 апреля 2012

Мы столкнулись с этой проблемой в Ubuntu Accomplishments Viewer, и, когда нам удалось ее решить, я представлю наше решение.

Хитрость заключается в том, чтобы поместить GtkIconView в GtkScrolledWindow и установить его hscrollbar_policy в значение "Always". Затем должен использоваться сигнал проверки изменения размера, чтобы реагировать, когда пользователь изменяет размер окна (обратите внимание, что он должен быть проверен, изменился ли размер, поскольку сигнал испускается также, когда, например, окно перемещается). Когда размер изменяется, модель, используемую GtkIconView, должна быть очищена и воссоздана, так как это запускает GtkIconView, правильно перераспределяя вновь полученное пространство (или сокращается). Кроме того, в результате горизонтальная полоса прокрутки никогда не будет видна, так как GtkIconView использует столько же места, сколько GtkScrolledWindow.

0 голосов
/ 22 ноября 2013

Используйте событие size_allocate.

Я определил свой класс:

class toto(Gtk.IconView):
    def __init__(self):
        super(toto,self).__init__()
        self.connect("size_allocate",self.resize)
        self.set_columns(4)

Затем я изменяю количество рабочих столбцов

def resize(self,_iv,_rect):
    print("X",rect.x)
    print("Y",rect.y)
    print("W",rect.width)
    print("H",rect.height)
    # calculate number of columns, let's say 3
    _cols=3
    self.set_columns(_cols)

Кажется, работает для меня

0 голосов
/ 02 ноября 2011

Да, кажется, после очень толстого взгляда, вам нужно будет сделать это самостоятельно. И учитывая сигнал, я бы проверил на GtkContainer :: check-resize .

...