Vala GTK3通过名字找到孩子

时间:2016-03-19 05:18:39

标签: gtk3 vala

使用Vala 0.30,如何按名称找到GTK子窗口小部件?

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

text.application_layout ();

该函数创建窗口和布局框。

class Example : Gtk.Window
  {
  public void application_layout ()

我希望不相关的代码将内容放在某些方框中。在C + GTK中,我可以将窗口定义为全局变量,任何代码都可以找到子框,然后添加内容。我在Vala找不到相同的工作。

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_grid或更新example.grid的方法。这意味着更改其他代码以接受示例对象。

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

0 个答案:

没有答案