带有vala项的gtk.combobox的宽度

带有vala项的gtk.combobox的宽度,gtk,vala,Gtk,Vala,我从vala开始,我无法设置Gtk.ComboBox的宽度。 在Python中,我可以这样做: combo = Gtk.ComboBox.new_with_entry() entry = combo.get_child() entry.set_width_chars(12) 在瓦拉: var combo = new ComboBox.with_entry (); var entry = combo.get_child(); entry.set_width_chars(12); 给出: err

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

combo = Gtk.ComboBox.new_with_entry()
entry = combo.get_child()
entry.set_width_chars(12)
在瓦拉:

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!”,那么问题出在哪里?

问题在于Vala不是Python,没有set\u width\u chars()函数。在瓦拉,有一个宽度字符属性。请尝试以下方法:

entry.width_chars = 12;
请在查看文档。特别是:

编辑:实际上有一个条目。设置\u width\u chars()。无论如何,在Vala中,有一些属性通常用于此类事情。

(免责声明:我对Vala的接触非常有限,但我希望这有帮助)
问题可能是
get_child()
的返回类型,它是
Gtk.Bin
函数,返回
Gtk.Widget
,而不是
Gtk.Entry
,对于
set_width\u 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
,因为添加到
组合框的子项是一个条目


希望这有帮助

我不知道vala,但他们有这样一个问题:这返回
错误:“width_chars”这个名称在“Gtk.Widget”的上下文中不存在
@jkd当然它必须是一个条目,而不是一般的小部件。这就是问题的答案。这不应该是“combo.get_child()as Gtk.Entry”用于安全的GObject样式类型转换吗?@Ancurio:我不太清楚你的意思
get_child()
在这里被调用是来自
Gtk.Bin
而不是
Gtk.ComboBox
并且在
Gtk.Bin
中,您不知道孩子的确切类型。您可以将任何小部件作为(唯一)子部件添加到
Gtk.Bin
。在
Gtk.ComboBox
Gtk.Bin
的情况下,这个子项恰好是
Gtk.Entry
@ather.anon.coward,我要说的是,Vala中的表达式“some_Gtk_widget as Gtk.Entry”导致C中的“Gtk_Entry(some_Gtk_widget)”,这是安全的,因为它在运行时检查类型,如果类型错误,则抛出断言。