带有vala项的gtk.combobox的宽度
我从vala开始,我无法设置Gtk.ComboBox的宽度。 在Python中,我可以这样做:带有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
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)”,这是安全的,因为它在运行时检查类型,如果类型错误,则抛出断言。