1

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

4

2 回答 2

3

(免责声明:我对 vala 的了解非常有限,但我希望这会有所帮助)
问题可能是 from 的返回类型get_child(),它是Gtk.Bin返回的函数,而Gtk.Widget不是有效的函数。这是因为子小部件可以是任何小部件。尝试静态类型转换:Gtk.Entryset_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的条目。

希望这可以帮助!

于 2013-01-25T18:36:43.587 回答
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 有一些属性通常用于这种事情。

于 2013-01-25T18:34:54.133 回答