rust - 连接到 Glade 文件中定义的自定义 GTK 信号
问题描述
我想将处理程序连接到自定义信号。在我的林间空地文件中,我有一个带有一些按钮的窗口。窗口在 Rust 中是这样加载的:
let glade_src = include_str!("views/window.glade");
let builder = gtk::Builder::new_from_string(glade_src);
let window: gtk::ApplicationWindow = builder.get_object("Window").expect("Couldn't get window view");
window.set_application(Some(app));
此窗口中的按钮定义了此信号:
<signal name="clicked" handler="_on_start_clicked" swapped="no"/>
在 Python 中,我可以使用简单的方法注释进行连接:
@Gtk.Template.Callback()
def _on_start_clicked(self, sender):
print("start clicked")
但是如何将 Rust 中的函数连接到这个信号呢?
AFAIK 我在 Rust 中没有这样的注释。我需要类似的东西window.connect_signal("_on_start_clicked", handler);
我正在使用 Rust 和 gtk 板条箱。
解决方案
这似乎很新。拉取请求实际上不在 gtk crate 的稳定版本中(从 v0.7.0 开始)。通过直接使用 git repo,我设法使用Builder::connect_signals()
如下方式连接信号:
// the handler
fn on_start_clicked(param: &[glib::Value]) -> Option<glib::Value> {
println!("on_start_clicked fired!");
None
}
// ...
// connect all signals
builder.connect_signals(|builder, handler_name| {
match handler_name {
// handler_name as defined in the glade file => handler function as defined above
"_on_start_clicked" => Box::new(on_start_clicked),
_ => Box::new(|_| {None})
}
});
如果仍然不是稳定版本,请在 Cargo.toml 文件中使用此依赖项:
[dependencies]
glib = { git = "https://github.com/gtk-rs/glib.git" }
[dependencies.gtk]
git = "https://github.com/gtk-rs/gtk.git"
features = ["v3_22"]
推荐阅读
- firebase - 全局 on_message 回调 firebase 颤动
- python - How to install a package on my jupyter notebook that is only available on pip and not in conda?
- python - Appending to a recursive list in python
- javascript - 如何使用 lodash javascript 对对象中的数组数据进行分组
- r - 在 R 中使用 ggplot 自定义热图外观
- ms-access - Read conflict when empty sub-form
- node.js - I am returning a Promise Object and unable to get actual object- nodej s
- microsoft-teams - 我们可以调整在 MS Teams 上呈现的自适应卡上的按钮大小吗
- logging - How to enable application logs in wso2?
- javascript - 尝试制作我的待办事项列表
- 标签显示为列但无法使其工作