You are not logged in.
I'm writing a little python+gtk application that allows for some easy customisation of the icon theme. I used Glade3 to create a GtkBuilder project, and I load it using gtk.Builder. I'm running into some trouble trying to populate my comboboxes though...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3.141592653589793238462643383279
# 5028841971693993751058209749445923
# 07816406286208998628034825342117067
# 9821 48086 5132
# 823 06647 09384
# 46 09550 58223
# 17 25359 4081
# 2848 1117
# 4502 8410
# 2701 9385
# 21105 55964
# 46229 48954
# 9303 81964
# 4288 10975
# 66593 34461 -con
# 284756 48233
# 78678 31652 71
# 2019091 456485 66
# 9234603 48610454326648
# 2133936 0726024914127
# 3724587 00660631558
# 817488 152092096
import sys
import os
import gtk
class Picon:
def on_MainWindow_destroy(self, widget, data=None):
gtk.main_quit()
def on_CloseButton_clicked(self, button, data=None):
gtk.main_quit()
def on_AboutButton_clicked(self, button, data=None):
if self.about_dialog:
self.about_dialog.present()
return
authors = [ "Rob (robrene) Spoel <robspoel@googlemail.com>" ]
about_dialog = gtk.AboutDialog()
about_dialog.set_transient_for(self.window)
about_dialog.set_destroy_with_parent(True)
about_dialog.set_name("π-con")
about_dialog.set_version("0.1")
about_dialog.set_copyright("Copyright © 2009 Rob Spoel")
about_dialog.set_comments("A tool to tweak the FIXME icon theme.")
about_dialog.set_authors(authors)
about_dialog.set_logo_icon_name("picon")
def close(dialog, response, editor):
picon.about_dialog = None
dialog.destroy()
def delete_event(dialog, event, editor):
picon.about_dialog = None
return True
about_dialog.connect("response", close, self)
about_dialog.connect("delete-event", delete_event, self)
self.about_dialog = about_dialog
about_dialog.show()
def init_folders(self):
cbox = self.builder.get_object("FolderCBox")
cbox.append_text("Current (no change)")
def init_brands(self):
cbox = self.builder.get_object("BrandCBox")
cbox.append_text("Current (no change)")
def __init__(self):
self.about_dialog = None
try:
self.builder = gtk.Builder()
self.builder.add_from_file("picon.glade")
except:
self.error_message = "Couldn't load 'picon.glade'"
sys.exit(1)
self.window = self.builder.get_object("MainWindow")
self.builder.connect_signals(self)
self.init_folders()
self.init_brands()
def main(self):
self.window.show()
gtk.main()
if __name__ == "__main__":
picon = Picon()
picon.main()
I once wrote a PyGTK application using libglade a long time ago, and this was how it was done (using gtk.glade.XML.get_widget() instead of gtk.Builder.get_object()). However, now I get the following warnings:
[rob@rob-thinkpad Purity Ultimate]$ ./picon.py
./picon.py:81: GtkWarning: gtk_combo_box_append_text: assertion `GTK_IS_LIST_STORE (combo_box->priv->model)' failed
cbox.append_text("Current (no change)")
./picon.py:87: GtkWarning: gtk_combo_box_append_text: assertion `GTK_IS_LIST_STORE (combo_box->priv->model)' failed
cbox.append_text("Current (no change)")
I'm not sure what it means, nor how to solve it... What is the easiest way to just populate the comboboxes with some text of my choosing?
Offline
self.combobox = builder.get_object('combobox')
cell = gtk.CellRendererText()
self.combobox.pack_start(cell)
self.combobox.add_attribute(cell, 'text', 0)
self.combobox.append_text("Option 1")
self.combobox.append_text("Option 2")
Unfortunately, you cannot add CellRenderers through Glade, so that's why you have to do it manually in the code.
Last edited by linkmaster03 (2009-11-29 03:17:56)
Offline
I'M afraid that didn't fix it, I still get the same warning, and the combobox is still empty. I did some more reading, and I believe I may have to add some sort of 'model', whatever that may be. I see Glade3 also has an option called 'ComboBox model' in the widget properties.
What I also found out is that '(...) the "model" property which (...) is acting as data source for the combo_box (...)' : http://www.pygtk.org/docs/pygtk/class-g … -get-model
There is also a method called set_model, but I don't really know what to feed it and how I can modify that so that it holds the options I want...
Offline
Alright, after some more trial and error I finally managed to get it working, I'm posting the relevant code here if anyone ever stumbles accross the same problem:
cbox = builder.get_object("my_combobox")
store = gtk.ListStore(gobject.TYPE_STRING)
store.append(["foobar"])
cbox.set_model(store)
cell = gtk.CellRendererText()
cbox.pack_start(cell, True)
cbox.add_attribute(cell, 'text', 0)
cbox.set_active(0)
Last edited by robrene (2009-11-29 12:58:30)
Offline
Yes, I forgot to mention that you need a ListStore. You can create this, and link it to the combo box, through Glade. You can also set the ListStore type through Glade:
Sorry I forgot to point that out; I was only looking at my code.
Offline