【问题标题】:width of a gtk.combobox with entry in vala带有 vala 条目的 gtk.combobox 的宽度
【发布时间】:2013-01-26 03:10:15
【问题描述】:

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

【问题讨论】:

    标签: gtk vala


    【解决方案1】:

    (免责声明:我对 vala 的了解非常有限,但我希望这会有所帮助)
    问题可能是来自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 的子项是一个条目。

    希望这会有所帮助!

    【讨论】:

    • 对于安全的 GObject 样式类型转换,这不应该是“combo.get_child() as Gtk.Entry”吗?
    • @Ancurio:我不太清楚你的意思。 get_child() 在这里被调用来自Gtk.Bin 而不是Gtk.ComboBoxGtk.Bin 你不知道孩子到底是什么类型。您可以将任何小部件作为(唯一)子级添加到Gtk.Bin。如果Gtk.ComboBoxGtk.Bin,这个孩子恰好是Gtk.Entry
    • @another.anon.coward 我的意思是 Vala 中的表达式“some_gtk_widget as Gtk.Entry”导致 C 中的“GTK_ENTRY(some_gtk_widget)”,这是安全的,因为它会检查类型在运行时抛出一个断言,如果它是错误的。
    【解决方案2】:

    问题是 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 中,有一些属性通常用于此类事情。

    【讨论】:

    • 我不知道瓦拉,但他们有这个:valadoc.org/#!api=gtk+-3.0/Gtk.Entry.set_width_chars
    • 返回error: The name 'width_chars' does not exist in the context of 'Gtk.Widget'
    • @jkd 当然它必须是一个Entry,而不是一个通用的Widget。毕竟这就是问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多