Можно ли нарисовать GtkTreeView в списке как GtkIconView? - PullRequest
2 голосов
/ 30 августа 2010

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

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

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

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

Это работает, но уродливо и кажется, что это не лучшее решение.

Глядя глубоко в документы, я нашел два виджета рядом с моими потребностями: IconView и TreeView. Но IconView может отображать только один pixbuf на «строку», и TreeView не отображается в виде сетки, как IconView.

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

Ответы [ 2 ]

1 голос
/ 31 августа 2010

IconView - это то, что вам нужно.В ListStore каждая строка представляет только один пиксель буф, но 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()
0 голосов
/ 02 сентября 2010

Лучший подход - придерживаться таблицы и переопределить выборки или использовать пользовательскую версию IconView с пользовательским ячеистым преобразователем, который может использовать 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

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

...