Refresh combobox context

How to refresh combobox context?

I want to load a file which it have lots of header on each column,
I put each header into combobox, let someone to select which header
column
does he want to parser.

When I re-select other files I want it refresh the combobox header
context.

I used “clear” but it will cause the combobox empty.
When I re-select other files it also show empty.

How to fix the problem?

Thanks.

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

Simon A. wrote in post #1017273:

CC Chen wrote in post #1017232:

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

I tried your method, and could refresh combobox content.
You really give me a big hand.

Thanks your help.

CC