Картинки пояснят название:
В LMDE и Ubuntu 12.04 мой GtkIconView выглядит так — это правильно с точки зрения расстояния между значками:
В Ubuntu 12.10, 13.04 и Fedora 17 тот же код выглядит следующим образом:
Н.Б. – Это плагин Python для ритмбокса. Исходный код находится здесь, на GitHub.
Я проверил следующие атрибуты GtkIconView — они точно такие же в Ubuntu 12.04 и в неправильно отображаемой версии 12.10.
- элемент-заполнение
- междурядье
- интервал между столбцами
- ширина элемента
Такое поведение отображения происходит сразу же, когда я устанавливаю либо text_column, либо markup_column (текст под значками) видимым столбцом, т. е. изменяю значение с -1 на столбец номер.
Если текстовый столбец/столбец разметки скрыт (т. е. значение -1), то отображение будет правильным на всех дистрибутивах.
Поскольку один и тот же код работает с точно такой же музыкальной коллекцией, я могу только предположить, что более новые библиотеки GTK в Fedora 17/Ubuntu 12.10/13.04 ведут себя по-разному.
Мой гугл-фу нашел только эта ссылка, которая звучит идентично. Однако изучение исходного кода ubuntu-accomplishment-viewer меня не просветило.
Кто-нибудь еще сталкивался с этим? Любые предложения о наилучшем способе дальнейшего расследования?
Хорошо - я попытался свести это к самому необходимому - этот простой файл поляны с этим простым кодом создает эту проблему. Однако я все еще не понимаю, что вызывает этот визуальный эффект :/
#!/usr/bin/env python from gi.repository import Gtk, GdkPixbuf window = Gtk.Window() window.connect('delete_event', Gtk.main_quit) ui = Gtk.Builder() ui.add_from_file('reproduce.ui') page = ui.get_object('main_box') window.add(page) ls = Gtk.ListStore(str, GdkPixbuf.Pixbuf) icon = GdkPixbuf.Pixbuf.new_from_file_at_size( str("/usr/share/icons/gnome/48x48/actions/zoom-out.png"), 90, 90) for i in range(15): ls.append(['Item %d' % i, icon]) covers_view = ui.get_object('covers_view') covers_view.set_model(ls) covers_view.set_text_column(0) covers_view.set_pixbuf_column(1) covers_view.set_item_width(100) # These lines make it easier to see the problem crt, crp = covers_view.get_cells() crt.set_property('background', '#000') crt.set_property('foreground', '#AAA') print crt.get_request_mode() window.set_default_size(600,400) window.show_all() Gtk.main()
и поляна - http://pastebin.com/uvQ9mWeg
Из предложения deinonychusaur я просмотрел gtkparasite
К сведению: я использовал готовый PPA от AnthonyWong как для Ubuntu 12.04, так и для 12.10.
Результаты для обеих версий были идентичными. Эксперименты по изменению свойств IconView с помощью приложений не помогли решить эту проблему.
Следующее предложение от дейнонихозавра выглядит очень интересно, и я могу подтвердить - т.е.
IconView CellRendererText в 2 раза больше, чем IconView Pixbuf в Fedora 17/12.10/13.04, но в 1 раз больше, чем IconView Pixbuf в 12.04.
CellRendererText
имеет предпочтительную ширину 180, и если установлено значение 100, это значение снова изменяется наwindow.show_all()
на 180. И даже если изменить обратно после того, как все показано, оно все равно изменится на 180 во времяGtk.main()
. (На самом деле If установит для себя двойную ширинуCellRendererPixbuf
, что можно увидеть, если изменить его на 100 вместо 90, в результате чегоCellRendererText
станет 200) - person deinonychusaur   schedule 04.01.2013CellAreaBox
, который содержит два средства визуализации (если его ориентация переключена на горизонтальную, проблема остается). То есть это не проблема упаковки + расширения. - person deinonychusaur   schedule 04.01.2013CellRendererText
виден. Кроме того, если вы проверите оператор печати, он скажет<enum GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH of type GtkSizeRequestMode>
, что может быть связано с проблемой? ЕстьGtk.SizeRequestMode.CONSTANT_SIZE
, но я не знаю, как его изменить. - person deinonychusaur   schedule 04.01.2013