gtk - 单击按钮后添加元素
问题描述
我试图通过编写一个非常简单的应用程序来学习 Vala,但我偶然发现了一个我无法自己解决的问题。
该程序仅显示一个按钮Init
,单击时应将 Button 添加X
到 Grid 容器。不幸的是,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+ 工具包,小部件默认是隐藏的。尽管您有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);
});
现在工作。
推荐阅读
- powerbi - 用于在 Power BI 中直接查询模式下计算销售额百分比的 DAX 查询
- mozilla - 下面描述了他们对 Mozilla Central 错误的任何解决方案吗?
- java - 意图活动不断弹出
- django - 在Django模板中循环相关模型的孩子
- azure - 如何在 Azure 函数中调用两个 REST API?
- powershell - 按时间戳对行数组进行排序
- java - Android - Admob 奖励广告会在一段时间后自动消失
- javascript - 在 laravel 6 中,从 JS 中获取值并将它们传递给控制器并将其保存到数据库?
- node.js - 发布 nodejs 包时,有些文件会上传到 npm,但不会上传到 Github。为什么?
- reactjs - 如何在材质ui文本字段的输入中修复占位符文本