PyGtk CellRendererCombo с использованием Pixbuf

Я хотел бы отобразить ComboBox в моем TreeView, который содержит некоторые значки. Поэтому я создал ListStore для хранения данных.

    # Initialize a list store for the combobox.
    priorityModel = Gtk.ListStore(GObject.TYPE_INT, GdkPixbuf.Pixbuf)
    priorityModel.append([0, self.loadPixbuf('./data/media/flag_blue.png')])
    priorityModel.append([1, self.loadPixbuf('./data/media/flag_green.png')])
    priorityModel.append([2, self.loadPixbuf('./data/media/flag_yellow.png')])
    priorityModel.append([3, self.loadPixbuf('./data/media/flag_red.png')])

Затем я создал объект Gtk.CellRendererCombo и назначил вышеупомянутый Gtk.ListStore в качестве модели.

    # Setup the priority cell renderer, ...
    self.priorityRenderer = Gtk.CellRendererCombo()
    self.priorityRenderer.set_property( 'editable', True )
    self.priorityRenderer.set_property("model", priorityModel)
    self.priorityRenderer.connect("edited", self.on_priority_changed, self.listStore, 3)

Наконец, я создал новый Gtk.TreeViewColumn, назначил CellRenderer и добавил его в TreeView.

    # ... setup the priority column ...
    self.colPriority = Gtk.TreeViewColumn("Priority", self.priorityRenderer, text=3 )

    # ... and add it to the treeview.
    self.append_column( self.colPriority )

Все хорошо, но как я могу отобразить значок Pixbuf вместо целого числа и как я могу инициализировать ComboBox, используя целое число? И, второй вопрос, возможно ли показывать только значок, когда выпадающий список не активен, и отображать значок и текст при изменении значения (ComboBox активен)?

1 ответ

Тебе необходимо Gtk.CellRendererPixbuf для отображения значка. Посмотрите, например, отличный учебник по Python 3 Gtk+.

Отвечая на ваш второй вопрос: да. Просто подключитесь к "changed" сигнал о Gtk.CellRendererCombo и добавьте / удалите средство визуализации ячеек динамически.

Другие вопросы по тегам