【发布时间】:2013-03-26 07:33:44
【问题描述】:
如何创建一个显示条目列表的 ComboBox,每个条目都包含一些文本和一个图标?
我将 Python 和 GTK3 与 GObject 内省一起使用。
【问题讨论】:
如何创建一个显示条目列表的 ComboBox,每个条目都包含一些文本和一个图标?
我将 Python 和 GTK3 与 GObject 内省一起使用。
【问题讨论】:
这是一个如何做到这一点的示例,灵感来自this answer for C。
from gi.repository import Gtk
from gi.repository import GdkPixbuf
store = Gtk.ListStore(str, GdkPixbuf.Pixbuf)
pb = GdkPixbuf.Pixbuf.new_from_file_at_size("picture.png", 32, 32)
store.append(["Test", pb])
combo = Gtk.ComboBox.new_with_model(store)
renderer = Gtk.CellRendererText()
combo.pack_start(renderer, True)
combo.add_attribute(renderer, "text", 0)
renderer = Gtk.CellRendererPixbuf()
combo.pack_start(renderer, False)
combo.add_attribute(renderer, "pixbuf", 1)
window = Gtk.Window()
window.add(combo)
window.show_all()
window.connect('delete-event', lambda w, e: Gtk.main_quit())
Gtk.main()
【讨论】:
GTK2 中的相同示例,受您的代码启发:
import pygtk
pygtk.require('2.0')
import gtk
import gtk.gdk
import gobject
import gc
store = gtk.ListStore(str, gtk.gdk.Pixbuf)
pb = gtk.gdk.pixbuf_new_from_file("picture.png")
store.append(["Test", pb])
combo = gtk.ComboBox(store)
renderer = gtk.CellRendererText()
combo.pack_start(renderer, True)
combo.add_attribute(renderer, "text", 0)
renderer = gtk.CellRendererPixbuf()
combo.pack_start(renderer, False)
combo.add_attribute(renderer, "pixbuf", 1)
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.add(combo)
window.show_all()
window.connect('delete-event', lambda w, e: gtk.main_quit())
gtk.main()
【讨论】: