Можно ли нарисовать GtkTreeView, перечисленный как GtkIconView?


Я работаю над приложением GTK+, написанным на python. Я, очевидно, использую PyGtk. Мое приложение касается коллекций видео. Это своего рода F-spot или Picasa, но для видео.

Как вы можете видеть в этих двух приложениях, у вас есть центральная область, где вы можете видеть все свои фотографии с миниатюрами тегов.

В моем приложении я хочу реализовать тот же kinf представления. А пока я просто использую это:

A gtk.Table, содержащий VBox, внутри VBox a Pixbuf (миниатюра моего видео) и HBox, а внутри HBox столько же Pixbuf, Сколько тегов.

Это работает, но это уродливо, и кажется, что это не лучшее решение. Глубоко заглянув в документы, я нашел два виджета рядом с моими neeeds: IconView и TreeView. Но IconView может отображать только один pixbuf на "строку", а TreeView не отображается в виде сетки, как IconView.

Мой вопрос: есть ли способ отображения TreeView как IconView (в сетке) ? Как бы вы реализовали способ размещения фотографий в F-spot а бирки под ними?

2 2

2 ответа:

IconView это то, что вам нужно. В ListStore каждая строка представляет только один pixbuf, но IconView регулирует изображения в сетке. Вот небольшой пример, запустите его с файлами изображений, которые вы хотите показать в качестве аргументов, например:

python example.py /usr/share/icons/hicolor/16x16/apps/*

.

import sys
import gtk


store = gtk.ListStore(gtk.gdk.Pixbuf)
iv = gtk.IconView(store)
iv.set_pixbuf_column(0)
for arg in sys.argv[1:]:
    pixbuf = gtk.gdk.pixbuf_new_from_file(arg)
    store.append((pixbuf, ))

w = gtk.Window()
w.connect('destroy', lambda w: gtk.main_quit())
sw = gtk.ScrolledWindow()
w.add(sw)
sw.add(iv)
w.show_all()
gtk.main()

Лучший подход-либо придерживаться таблицы и переопределять выборки, либо использовать пользовательскую версию IconView с пользовательским cellrenderer, который может принимать gtk.HBox ().

Некоторые рекомендации о пользовательском cellrenderer:

Http://faq.pygtk.org/index.py?req=show&file=faq13.045.htp

Http://faq.pygtk.org/index.py?req=show&file=faq13.056.htp

Обсуждение произошло в списке рассылки pygtk :

Htp://old.nabble.com/Drawing-widgets-in-a-custom-cellrenderer-td14207692.html

WWWalter сделать пример кода : http://www.translate.org.za/blogs/walter/en/content/conquering-cellrendererwidget

По словам Рубена Вермеерша, Ф-горшок использовать модифицированную версию IconView. Код можно найти здесь : http://git.gnome.org/browse/f-spot/?h=icon-view-cleanup