CC Chen wrote in post #1017232:
How to refresh combobox context?
You mean : How to refresh items of a combobox ?
I used “clear” but it will cause the combobox empty.
When I re-select other files it also show empty.
Gtk::Combobox#clear affects the combobox itself, not what it displays.
That is, you are clearing the widget of its layout, not its content.
How to fix the problem?
I guess you are using combobox with simple text. The only way is to
iterate on items and remove them one by one. But I urge you not to do
that.
If you want to update the combobox content, use a model. Take a look at
the examples in the sources , gtk2/sample/misc.
Here is a sample for your needs, as I understand them :
require ‘gtk2’
model = Gtk::ListStore.new( String)
[“foo”, “bar”, “baz”].each do |text|
iter = model.append
iter[0] = text
end
combo = Gtk::ComboBox.new(model)
renderer = Gtk::CellRendererText.new
combo.pack_start(renderer, true)
combo.set_attributes(renderer, :text => 0)
combo.active = 1
combo.signal_connect(“changed”) do |c|
p “combo: #{c.active}, #{c.active_iter[0]}” if c.active > -1
end
button = Gtk::Button.new(“Click me”)
button.signal_connect(“clicked”) do |button|
model.clear
[“ruby”, “python”, “perl”].each do |text|
iter = model.append
iter[0] = text
end
combo.active = 0
end
window = Gtk::Window.new
window.signal_connect(“destroy”) { Gtk.main_quit }
vbox = Gtk::VBox.new
vbox.add(combo).add(button)
window.add(vbox).show_all
Gtk.main
Hope it helps.
Simon