【问题标题】:Adding an element after clicking on a button单击按钮后添加元素
【发布时间】:2019-05-19 08:30:04
【问题描述】:

我试图通过编写一个非常简单的应用程序来学习 Vala,但我偶然发现了一个我无法自行解决的问题。

该程序仅显示一个按钮Init,单击它应该将一个按钮X 添加到网格容器中。不幸的是,Grid 容器的内容仍然是空的,我不知道为什么。

更令人困惑的是,在构造函数中添加 Button 可以正常工作。

那么我在这里做错了什么?

using Gtk;

class MyWindow: Gtk.Window {
    private Gtk.Grid mGrid;

    public MyWindow() {
        var init=new Gtk.Button.with_label("Init");
        init.clicked.connect((t)=>{
            stdout.printf("Init");
            mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
        });
        var box=new Gtk.Box(VERTICAL,0);
        mGrid=new Gtk.Grid();
        //mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
        box.add(init);
        box.add(mGrid);
        this.add(box);
        this.show_all();
    }
}

int main(string[] args) {
    Gtk.init(ref args);
    new MyWindow();
    Gtk.main();
    return 0;
}

【问题讨论】:

    标签: gtk gtk3 vala gnome-builder


    【解决方案1】:

    使用 GTK+ 工具包,小部件默认是隐藏的。尽管您有this.show_all (),但该按钮是在之后创建的并且是隐藏的。从以下位置更改回调:

    init.clicked.connect((t)=>{
      stdout.printf("Init");
      mGrid.attach(new Gtk.Button.with_label("X"),0,0,1,1);
    });
    

    类似于:

    init.clicked.connect((t)=>{
      stdout.printf("Init");
      var my_button = new Gtk.Button.with_label("X");
      my_button.show_all ();
      mGrid.attach(my_button,0,0,1,1);
    });
    

    现在可以使用了。

    【讨论】:

    • 请注意,在 Gtk4 中这有所不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多