Vala GTK3按名称查找子项

Vala GTK3按名称查找子项,gtk3,vala,Gtk3,Vala,使用Vala0.30,如何按名称查找GTK子部件 主代码调用一个函数来设置应用程序布局: text.application_layout (); 该函数用于创建窗口和布局框 class Example : Gtk.Window { public void application_layout () 我希望不相关的代码在一些框中放置内容。在C+GTK中,我可以将窗口定义为一个全局变量,任何代码都可以找到一个子框,然后添加内容。我在瓦拉找不到一个工作同等品 Jen建议使用Containe

使用Vala0.30,如何按名称查找GTK子部件

主代码调用一个函数来设置应用程序布局:

text.application_layout ();
该函数用于创建窗口和布局框

class Example : Gtk.Window
  {
  public void application_layout ()
我希望不相关的代码在一些框中放置内容。在C+GTK中,我可以将窗口定义为一个全局变量,任何代码都可以找到一个子框,然后添加内容。我在瓦拉找不到一个工作同等品

Jen建议使用Container.get_children()。我将对此进行试验。在前面的C代码中,当填充网格时,get_children方法生成了数千个子元素

有些网页显示带有公共字符串的Vala类。当公共变量是GTK小部件时,Vala不会编译类的示例。我还尝试了十几种在其他语言中有效的变体,但在Vala中失败了

最后,我找到了一种方法,可以使用其他代码找到一个公共GTK小部件。以下是汇编。所有在线示例略有不同,无法在当前Vala中编译

class Example : Gtk.Window
  {
  public Grid example_grid = new Grid ();
  public void application_layout ()
如果这是唯一的选择,我将不得不公开许多项目

我仍然会遇到在可变长度的子对象集中查找最后一个子对象的问题,例如添加到框中的最后一个标签或添加到网格中的最后一行。我想在一个长长的列表中给项目加上一个名字,比如last,然后直接查找,而不是每次读一千个孩子

另一个更新。以下网格定义在类中工作。当在类内调用时,它可以从类的其他方法工作

class Example : Gtk.Window
  {
  public Grid example_grid;

  this.directory_grid = new Grid ();
我的主代码有var example=new example();并将示例对象传递给需要用户界面元素的其他代码。然后,其他代码可以访问example.example\u网格或更新example.grid的方法。这意味着更改其他代码以接受示例对象


然后,我发现丢失了一个页面,其中显示了如何在不将对象传递给函数的情况下访问主窗口对象。如果我能再次找到它,它将允许我访问example.example\u网格,而无需更改代码来传递example对象。这正接近解决方案。

类似于
Container.get_children()
?您的问题相当混乱,您在这里要求至少两件不同的事情(如何获取容器子项、如何按名称获取小部件、如何将小部件保存在变量中、如何将事情公开等等)。如果有必要的话,你应该把它分成多个问题。@Jens,关于公开内容的部分的意思是“如果没有按名称查找,你如何让其他代码查找小部件”。我将尝试重新编写问题。请编辑您的问题以包含MCVE,好吗?至于获取最后一个插入的子项的问题:为什么不将最后一个插入的子项存储在变量(或字典或类似容器)中?我怀疑你的问题不是Vala语言,而是概念上的问题。MCVE真的很有帮助。