连接到Glade文件中定义的自定义GTK信号

问题描述 投票:3回答:1

我想将处理程序连接到自定义信号。在我的林间空地文件中,我有一个带有一些按钮的窗口。窗口在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板条箱。

rust gtk glade gtk-rs
1个回答
2
投票

这似乎很新。 pull request实际上不是gtk条板箱的稳定版本(自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"]
© www.soinside.com 2019 - 2024. All rights reserved.