使用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而无需更改代码以传递示例对象。这已接近解决方案。