如何在单击按钮事件中执行其他任务时关闭主窗口?

时间:2017-07-19 01:25:39

标签: rust gtk

我正在尝试重新创建this Python project in Rust。 Python版本使用PyQt5,但Ruby版本使用GTK。当使用Rust或Ruby时,我不知道当用户按下“Tweet”时如何正确执行“推特”代码。

用户按下的按钮称为“发送”,按下时会调用此代码:

send.connect_clicked(move |_| {
    let sent: Option<String> = TextBuffer::get_text(
        &TextView::get_buffer(&text).unwrap(),
        &TextBuffer::get_start_iter(&TextView::get_buffer(&text).unwrap()), 
        &TextBuffer::get_end_iter(&TextView::get_buffer(&text).unwrap()), false);
    let actual = sent.unwrap();
    println!("Text: {}", actual);
    let toot = Command::new("t").output()
        .expect("Nope");
    println!("{}", String::from_utf8_lossy(&toot.stdout));
    Notification::new().summary("Sent")
        .body(&actual).show().unwrap();
    gtk::main_quit();
});

每当用户按下它时,窗口会冻结,直到代码完成运行,然后主窗口退出。

如何正确关闭窗口并执行此代码?它可能非常简单,但我几乎没有正确研究功能。编写Python脚本的坏习惯。

1 个答案:

答案 0 :(得分:0)

为了正确关闭主窗口并执行其他任务,我使用了glib中的idle_add

thread::spawn(move || {
    glib::idle_add(move || {
        toot(tweet);
        gtk::main_quit();
        Continue(false)
    });
});