我从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!”,问题出在哪里?
答案 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有一些属性通常用于此类事物。