Combobox 如何在gjs中使用Gtk组合框?
下面,我尝试在gjs(Gnome桌面上的本机javascript)中填充一个组合框 到目前为止,我想出了两种类似的方法,几乎都能奏效 第一个可能与教程中的示例最接近:Combobox 如何在gjs中使用Gtk组合框?,combobox,gjs,Combobox,Gjs,下面,我尝试在gjs(Gnome桌面上的本机javascript)中填充一个组合框 到目前为止,我想出了两种类似的方法,几乎都能奏效 第一个可能与教程中的示例最接近: var testStore = new Gtk.ListStore (); testStore.append ([0, "test1"]); testStore.append ([1, "test2"]); var cbox = Gtk.ComboBox.new_with_model (testStore); cbox.set_
var testStore = new Gtk.ListStore ();
testStore.append ([0, "test1"]);
testStore.append ([1, "test2"]);
var cbox = Gtk.ComboBox.new_with_model (testStore);
cbox.set_entry_text_column (1);
cbox.show ();
这里的主要问题是它没有显示任何东西,例如组合框是空的。根据教程,“new Gtk.ListStore”需要列类型作为参数,但我在其中放置的任何内容都会导致一些错误消息
将其与其他示例中的代码混合在一起,我得出了以下结论:
var testStore = new Gtk.ListStore ();
testStore.append ([0, "test1"]);
testStore.append ([1, "test2"]);
var cbox = Gtk.ComboBox.new_with_model (testStore);
var cellRenderer = new Gtk.CellRendererText ();
cbox.pack_start (cellRenderer, true);
cbox.add_attribute (cellRenderer, "text", 1);
cbox.show ();
它的优点是可以准确地显示某些内容,例如组合框中充满了可以选择的列表项,但它们都是空的。只有几块白色的
有什么想法吗?可能是多余的,但有效:
let model = new Gtk.ListStore();
model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
let cbox = new Gtk.ComboBox({model: model});
let renderer = new Gtk.CellRendererText();
cbox.pack_start(renderer, true);
cbox.add_attribute(renderer, 'text', 1);
model.set(model.append(), [0, 1], ['key1', 'value1']);
model.set(model.append(), [0, 1], ['key2', 'value2']);
cbox.set_active(0); // set value
cbox.connect('changed', function(entry) {
let [success, iter] = cbox.get_active_iter();
if (!success)
return;
let myValue = model.get_value(iter, 0); // get value
});