带有vala条目的gtk.combobox的宽度

时间:2013-01-25 18:15:55

标签: gtk vala

我从vala开始,我无法设置Gtk.ComboBox的宽度。 在Python中,我可以这样做:

combo = Gtk.ComboBox.new_with_entry()
entry = combo.get_child()
entry.set_width_chars(12)

在vala中:

var combo = new ComboBox.with_entry ();
var entry = combo.get_child();
entry.set_width_chars(12);

给出:

error: The name `set_width_chars' does not exist in the context of `Gtk.Widget'

尽管如此:

var combo = new ComboBox.with_entry ();
var entry = combo.get_child();
if (entry is Gtk.Entry)
    stdout.printf("Entry!\n")

打印“Entry!”,问题出在哪里?

2 个答案:

答案 0 :(得分:3)

(免责声明:我对vala的接触非常有限,但我希望这会有所帮助)
问题可能是来自get_child()的返回类型,Gtk.Bin函数返回Gtk.Widget而不是Gtk.Entry set_width_char()有效。这是因为Gtk.Bin的子窗口小部件可以是任何窗口小部件。尝试静态类型转换:

var entry = (Entry)combo.get_child();

或更复杂的版本

var entry = combo.get_child();
((Entry)entry).set_width_chars(12);

至于Gtk.Entry的成功类型检查,虽然您拥有的Gtk.Widget类型为Gtk.Entry,因为添加到combobox的子项是一个条目。

希望这有帮助!

答案 1 :(得分:0)

问题是Vala不是Python,没有set_width_chars()函数。在Vala,有一个width_chars属性。试试这个:

entry.width_chars = 12;

请查看http://www.valadoc.org/#!wiki=gtk+-3.0/index处的文档。特别是:http://www.valadoc.org/#!api=gtk+-3.0/Gtk.Entry.width_chars

编辑:实际上有一个Entry.set_width_chars()。无论如何,在Vala有一些属性通常用于此类事物。